leetcode-033-1比特与2比特字符
刷题之旅从数组类型的题目开始。第三十三道题目是1比特与2比特字符,对应leetcode的题号为717。
题目描述
有两种特殊字符。第一种字符可以用一比特0来表示。第二种字符可以用两比特(10 或 11)来表示。
现给一个由若干比特组成的字符串。问最后一个字符是否必定为一个一比特字符。给定的字符串总是由0结束。
示例 1:
1 | 输入: |
示例 2:
1 | 输入: |
注意:
- 1 <= len(bits) <= 1000.
- bits[i] 总是0 或 1.
解题思路
分析一下题目,0可以用一比特来表示,10或11可以用两比特来表示。某个数组元素总为1或0,以[1,0,0]为例,1不能单独作为一个比特,必须跟0或1结合才行,那么10才符合条件,那么还剩一个0,这个0用一比特表示,那么这个数组就符合条件,因为题目要求最后一个字符为一比特字符。
比如[1,1,1,0],这个就不符合,为什么呢?因为同理,第一个1必须结合0或1才行,此时11为两比特,那么前两个1已经被占用,这个时候用第三个1,同理,10才行,那么此时11和10全部用完,说明最后一个0不能作为一比特来用了。
所以这道题目理解的关键就是,数组从前往后,遇到1就要占两位,遇到0就占一位。按照上面的规则一直判断,如果最后还能胜一个0说明符合条件,如果最后不剩了,那么就不符合条件。那么就是判断咯,1则加2,0则加1,理解了这个思想后,就可以写代码了,注意判断count的结束条件,不是判断到最后一位,而是倒数第二位。时间复杂度为O(N),空间复杂度为O(1)。
提交代码
1 | class Solution { |