题目:
有两种特殊字符。第一种字符可以用一比特0
来表示。第二种字符可以用两比特(10
或 11
)来表示。
现给一个由若干比特组成的字符串。问最后一个字符是否必定为一个一比特字符。给定的字符串总是由0结束。
示例 1:
1 | 输入: |
示例 2:
1 | 输入: |
注意:
1 <= len(bits) <= 1000
.bits[i]
总是0
或1
.
解答:
解法1:
思路:如果最后一位的前一位是0,那该字符是一字节字符,所以只要判断前一位是1的情况;
根据1的个数,即可以判断该字符的类型: 只有两种情况
1)xxx0(1111*n)0 : 只要判断最后一个零与倒数第一个0之间1的个数,便可以判断最后的0与1有无关系
2) (111*n)0: 若除了字符最后一位的零之外没有其他0, 则直接判断1的个数
*: 1的个数与字符类型的关系是: $$n \% 2 === 0$$
以下是以递归实现,速度 68 ms
1 | var isOneBitCharacter = function (bits) { |
解法2:
以下是直接找最后的0与(倒数的0/ 或者最后的1)之间的1的个数来判断,
速度 116 ms
1 | const isOneBitCharacter2 = function (bits) { |
结果递归的实现比较迅速