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
.
解题思路:题目的大意是,数组由one bit 0和tow bit 10或11组成,判断最后一位是由one bit组成的,返回true,tow bit组成的返回false
两种情况:
1.首先由后往前推,如果后两位都为0的话,那肯定是true
2. 如果倒数第二位为1的话,那就得判断后面的最后一位是10产生的还是0产生的。
思路为:我们知道两位的时候是10或者11,在数组中如果碰到1,则必为two bit .则跳过1后面的那位,直接到1后面的后面那位再判定。这样一直递归下去,看最后一位是否是被跳过的。如果是被跳过,那就是two bit产生的,返回false
class Solution {
public:
bool isOneBitCharacter(vector<int>& bits) {
if (bits[bits.size()-1] == 0 && bits[bits.size() - 2] == 0) return true;
int i = 0;
return dfs(bits, i);
}
private:
bool dfs(vector<int>& bits, int idx) {
if (idx == bits.size()) return false;
if (idx == bits.size() - 1 && bits[idx] == 0) return true;
if (bits[idx] == 1) return dfs(bits, idx + 2);
else
return dfs(bits, ++idx);
}
};