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
解题思路:
- 此题解题思路比较简单
- 由题可知,当前字符为零时,只可能是0(跳过看下一个即可)。
- 若当前字符为 1,那么就存在两种可能 10、11(跳过两个字符)
- 当退出遍历循环,只需判断 i 是否等于最后一个字符即可。因为当最后是两比特时,经过最后一次循环,i 必定大于数组长度减一(因为数组从零开始计数)
- 可以自己设置两个测试用例,推理代码执行过程。
- 代码
class Solution {
public boolean isOneBitCharacter(int[] bits) {
int n = bits.length;
int i = 0;
while (i < n-1) {
i = i + bits[i] + 1;
}
return i == n-1;
}
}