1-bit and 2-bit Characters
一个数组bits由0、1组成,分为两种类型的元素,一种是单字符的0,另一种是双字符的10或11.判断数组bits的最后一位0是否是单字符的0.
思路:观察数组发现,从左往右看,只要遇到了1,那么该位与下一位必组成双字符。用这种方法将双字符剔除,直到数组的倒数第三位,此时除了数组的倒数两位没有被操作,前面的所有元素均为0。最后,判断数组的倒数第二位是0还是1,若为0,则倒数第一位的0为单字符;反之则为双字符。
class Solution:
def isOneBitCharacter(self, bits):
"""
:type bits: List[int]
:rtype: bool
"""
i = 0
while i < (len(bits) - 2):
if bits[i] == 1:
bits.pop(i+1)
bits.pop(i)
else:
i = i + 1
if len(bits) == 1:
return True
elif bits[-2] == 1:
return False
else:
return True
上述方法提交成功,但运行速度比较慢,所有看了一下别人运行速度快的方法。总体思路是类似的,但是代码精简了很多:从左到右遍历数组,如果遇到1则i跳到后两位,如果遇到0则i跳到后一位。这种遍历方法保证了每次i都落到字符的起点,遍历结束后,若i正好处于倒数第一位,说明最后一位是单元素的0,返回True.
i = 0
while i < len(bits) - 1:
i += bits[i] + 1
return i == len(bits) - 1