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 always0
or1
.
思路:
1,判断数组长度是不是为1或者0,如果是可以直接判断编码是否正确
2,长度大于2时,
判断当前是不是最后一个数,若不是:
判断是不是第一个数,若是第一个数,且为0,则跳过(0可以单独作为一个编码)
如果不是第一个数,则判断是不是1,若是1,则i++,因为1需要与后一个数结合
最终,若是1与最后一个数结合了,则编码错误,否则最后还余一个数,则判断最后一个数是不是0,是则正确
#pragma once
#include <iostream>
#include<vector>
using namespace std;
class Solution {
public:
bool isOneBitCharacter(vector<int>& bits) {
int leng=bits.size();
//数组含有2个元素以下时
if (leng == 0 || (leng == 1 && bits[0] == 0))
{
return true;
}
else if (leng == 1 && bits[0] != 0)
{
return false;
}
//两个及以上
for (int i = 0; i < leng; i++)
{
//判断当前元素是不是倒数最后一个,并且是不是0,是则为true
if (i == leng - 1 && bits[i] == 0)
{
return true;
}
//第一数是0,则为单独的一个数
if (i == 0 && bits[i] == 0)
{
continue;
}
//如果有一个值为1,则后面必跟一个数
else if (bits[i] == 1)
{
i++;
continue;
}
}
return false;
}
};