E-717. 1-bit and 2-bit Characters

# 又是个傻逼题目, 话都讲不清.
# 题目的意思是, 有两个char, 一个由0表示, 一个由10或者11表示, 现在我们用一个数组来存放
# 用这两个char组成的string. 已知这个数组最后一位(即, 最左一位)是0, 我们要判断, 这个
# string的最右(即最后一位)char是不是由一个0表示的那个char

# 思路是, 我们观察组成这两个char的bits, 我们可以知道10和11总是由1开头, 0总是由0开头, 那么
# 当我们用一个下标index(初始化为0)从左往右遍历这个list的时候, 遇到1我们就跳过一个bit, 遇到
# 0就正常往下遍历, 这样的话我们的index最终要么指向len(list)(这种情况, 相当于我们list最右端
# 是10代表的char, 所以我们跳过了一个bit), 要么指向len(list) - 1 (这种情况就是最后index刚
# 好指在0上面, 说明list最右端是0代表的char). 所以我们只需要如此操作, 最后看index指到哪里就行了.

# 标答
class Solution(object):
    def isOneBitCharacter(self, bits):
        i = 0
        while i < len(bits) - 1:
            i += bits[i] + 1
        return i == len(bits) - 1
        
class Solution:
    def isOneBitCharacter(self, bits: List[int]) -> bool:
        i = 0
        while i < len(bits):
            if i == len(bits) -1:
                break
            if bits[i] == 0:
                i += 1
            if bits[i] == 1:
                i += 2
        return not i >= len(bits)
        

Last updated

Was this helpful?