717. 1-bit and 2-bit Characters
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.
思路:
先进行一个循环,检测是不是00或者是10,11三种情况中的一种,是的话直接删除这两位,否则(就是为01的情况)就只删除第一位0,再次读取前两位,用while来完成只读前两位的工作,然后最后长度只有2以后再判断(第一版没有考虑到[0,0]的情况,只按最后输出长度是1还是0来返回,出错了,所以改为最后长度为2时就跳出while循环。)
注:我这个答案虽然可以通过但是效率不高,还有值得改进的地方!
代码:
class Solution:
def isOneBitCharacter(self, bits):
"""
:type bits: List[int]
:rtype: bool
"""
# if len(bits)==0:
# return False
# while len(bits)>1:
# if bits[0:2]==[0,0] or bits[0:2]==[1,0] or bits[0:2]==[1,1]:
# del bits[0:2]
# else:
# del bits[0]
# if len(bits) == 1:
# return True
# if len(bits) == 0:
# return False
while len(bits)>2:
if bits[0:2]==[0,0] or bits[0:2]==[1,0] or bits[0:2]==[1,1]:
del bits[0:2]
else:
del bits[0]
if len(bits) == 1:
return True
if len(bits) == 2:
if bits[0]==1:
return False
else:
return True