717. 1 比特与 2 比特字符

题目描述:

有两种特殊字符:

  • 第一种字符可以用一比特 0 表示
  • 第二种字符可以用两比特(10 或 11)表示

    给你一个以 0 结尾的二进制数组 bits ,如果最后一个字符必须是一个一比特字符,则返回 true

示例 1:

输入: bits = [1, 0, 0]

输出: true

解释: 唯一的解码方式是将其解析为一个两比特字符和一个一比特字符。所以最后一个字符是一比特字符。

示例 2:

输入: bits = [1,1,1,0]

输出: false

解释: 唯一的解码方式是将其解析为两比特字符和两比特字符。所以最后一个字符不是一比特字符。

提示:

  • 1 <= bits.length <= 1000
  • bits[i] 为 0 或 1

思路:

思维题,倒序判断最后一段1奇偶性,最后一个0被占用了,一旦构成01就是不合法的

最后一段1为奇数则一定不合法

最后一段1为偶数则一定合法

这个可以枚举验证一下

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public boolean isOneBitCharacter(int[] bits) {
int n = bits.length;
if (bits[n - 1] == 1)
return false;
int r = bits.length - 2;
int cnt = 0;
while (r > -1 && bits[r] == 1) {
cnt++;
r--;
}
return cnt % 2 == 0;
}
}