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
or 11
).
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 always 0
or 1
.
1.从头扫描整个整数组,0可以单独一个字符表示,1必须两个字符表示。
class Solution {
public boolean isOneBitCharacter(int[] bits) {
int lens=bits.length,i;
for(i=0;i<lens-1;) {
if(bits[i]==0)i++;
if(bits[i]==1)i+=2;
}
return i==lens-1;
}
}
2.从检查数组末尾
如果是00则肯定true,因为没有两个字符可以表示00;
如果是10则统计连续的1的个数,连续1的个数为奇数则为false 个数为偶数则为true。
class Solution {
public boolean isOneBitCharacter(int[] bits) {
int ones = 0;
//Starting from one but last, as last one is always 0.
for (int i = bits.length - 2; i >= 0 && bits[i] != 0 ; i--) {
ones++;
}
if (ones % 2 > 0) return false;
return true;
}
}