1 比特与 2 比特字符

有两种特殊字符:

  • 第一种字符可以用一比特 0 表示
  • 第二种字符可以用两比特(10 或 _11_)表示
    一个以 0 结尾的二进制数组 bits ,如果最后一个字符必须是一个一比特字符,则返回 true 。

根据题意,第一种字符一定以 0 开头,第二种字符一定以 1 开头。

我们可以对 bits 数组从左到右遍历。当遍历到 bits[i] 时,如果 bits[i]=0 ,说明遇到了第一种字符,将 i 的值增加 1;如果 bits[i]=1,说明遇到了第二种字符,可以跳过 bits[i+1] (注意题目保证 bits 一定以 0 结尾,所以 bits[i]一定不是末尾比特,因此 bits[i+1] 必然存在),将 i 的值增加 2。

上述流程也说明 bits 的编码方式是唯一确定的,因此若遍历到 i=n−1,那么说明最后一个字符一定是第一种字符.

1
2
3
4
5
6
7
8
let isOneBitCharacter = function(bits) {
let i = 0, n = bits.length;
while (i < n - 1) {
i += bits[i] + 1;
}
return i === n - 1;

};