题目链接:
题目:
We have two special characters. The first character can be represented by one bit
0
. The second character can be represented by two bits (10
or11
).Now given a string represented by several bits. Return whether the last character must be a one-bit character or not. The given string will always end with a zero.
Example 1:
Input: bits = [1, 0, 0] Output: True Explanation: The only way to decode it is two-bit character and one-bit character. So the last character is one-bit character.
Example 2:
Input: bits = [1, 1, 1, 0] Output: False Explanation: The only way to decode it is two-bit character and two-bit character. So the last character is NOT one-bit character.
Note:
1 <= len(bits) <= 1000
.bits[i]
is always0
or1
.
题目分析:
定义了两种编码,一种称为1 bit ,只有0。一种称为 2 bit ,有10 和11。
现在给定一个 bits数组,判断最后一个字符是 1bit 还是 2 bit。
解题思路:
发现两种编码,2 bit 的一定是1 开头。我们就遍历整个 bits数组,特地留下最后一位不遍历,留在最后判断。
当该位是 1 时,说明一定是 2 bit编码,所以直接对遍历跳过下一位,直接看下下一位。
当该位时 0 时,说明一定是 1 bit 编码,那就看下一位。
直到遍历完整个 bits 数组(留下最后一位)。
如果这时,遍历的下标刚好 指向最后一位,那就可以确定最后一位是 1 bit 编码,也就返回 true;
如果这是,下标已经是超过了最后一位,说明倒数第二位是1,因此下标连跳 2次,那么最后一位是属于 2 bit的。
AC代码:
class Solution {
public:
bool isOneBitCharacter(vector<int>& bits) {
int i = 0;
for(i = 0;i < bits.size()-1;++i)
{
if(bits[i] == 1)
++i;
}
if(i==bits.size()-1)
return true;
return false;
}
};