**
题目
**
有两种特殊字符。第一种字符可以用一比特0来表示。第二种字符可以用两比特(10 或 11)来表示。
现给一个由若干比特组成的字符串。问最后一个字符是否必定为一个一比特字符。给定的字符串总是由0结束。
示例 1:
输入:
bits = [1, 0, 0]
输出: True
解释:
唯一的编码方式是一个两比特字符和一个一比特字符。所以最后一个字符是一比特字符。
示例 2:
输入:
bits = [1, 1, 1, 0]
输出: False
解释:
唯一的编码方式是两比特字符和两比特字符。所以最后一个字符不是一比特字符。
注意:
1 <= len(bits) <= 1000.
bits[i] 总是0 或 1.
思路
解题思路
因为一比特0,二比特(10或11)
***(1)***正向查找法的话 可以看出第一个出现1的后边肯定是0或者1(10和11)所以遍历的时候自变量+2,继续找1,
直到i等于bits的后两位,后两位第一个是一错误,是零正确(因为如果倒数第二个数为零的话,最后一位数必须是零)
***(2)***反向查找 for循环:从导数第二个数字开始,如果是0 break 返回True 否则统计1的个数,如果奇数返回False 偶数返回True
代码
思路一:
python3代码
class Solution:
def isOneBitCharacter(self, bits: List[int]) -> bool:
n=len(bits)
i=0
while i<n-2:
if bits[i]==1:
i+=2
else:
i+=1
if i==(n-2) and bits[-2]==1:
return False
else:
return True
c++代码
class Solution {
public:
bool isOneBitCharacter(vector<int>& bits) {
int n=bits.size();
int i=0;
while (i<n-2)
{
if(bits[i]==1)
{
i+=2;
}
else
{
i++;
}
}
if (i==n-2&&bits[n-2]==1)
return false;
return true;
}
};
思路二:
c++代码:
class Solution {
public:
bool isOneBitCharacter(vector<int>& bits) {
int tmp=0;
int n=bits.size();
for(int i=n-2;i>=0;i--)
{
if(bits[i]==0)
break;
else
tmp++;
}
if(tmp%2==0)
return true;
return false;
}
};
python3代码
```python
class Solution:
def isOneBitCharacter(self, bits: List[int]) -> bool:
tmp=0
for i in range(len(bits)-2,-1,-1):
if bits[i]==0:
break
tmp+=1
if tmp%2==0:
return True
return False
*
记得点赞,欢迎交流
作者:NLProokie
- width: 190px;
height: 254px;
background: rgb(236, 236, 236);
box-shadow: rgba(0, 0, 0, 0.4) 0px 2px 4px, rgba(0, 0, 0, 0.3) 0px 7px 13px -3px, rgba(0, 0, 0, 0.2) 0px -3px 0px inset;