您的位置:首页 > 其它

717. 1-bit and 2-bit Characters

2017-11-29 21:23 323 查看
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产生的,返回falseclass 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);
}
};

            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: