【lc刷题】717 1比特与2比特字符_Day26(84/300)

84/300

  1. 1比特与2比特字符
    有两种特殊字符。第一种字符可以用一比特0来表示。第二种字符可以用两比特(10 或 11)来表示。
     
    现给一个由若干比特组成的字符串。问最后一个字符是否必定为一个一比特字符。给定的字符串总是由0结束。
     
    示例 1:
     
    输入:
    bits = [1, 0, 0]
    输出: True
    解释:
    唯一的编码方式是一个两比特字符和一个一比特字符。所以最后一个字符是一比特字符。
    示例 2:
     
    输入:
    bits = [1, 1, 1, 0]
    输出: False
    解释:
    唯一的编码方式是两比特字符和两比特字符。所以最后一个字符不是一比特字符。
    注意:
     
    1 <= len(bits) <= 1000.
    bits[i] 总是0 或 1.
     
    [0,0] True
    [0,1,0,1,0] False
    [0,1,0,1,0,0] True

【lc刷题】717 1比特与2比特字符_Day26(84/300)_第1张图片
思路1: 因为只判断最后一个是不是单个的0,所以前面0不用管,但凡遇见1,就抠掉10/11,抠到最后看有没有剩。

class Solution:
    def isOneBitCharacter_01(self, bits: List[int]) -> bool:      
        i = 0
        while i < len(bits):            
            if bits[i] == 1:
                bits[:] = bits[i+2:]
                i = 0
            else:
                i += 1 
        return True if bits else False

思路2:指针,遇见0,走一步;遇见1,走两步。看最后落点是不是正好等长。
【lc刷题】717 1比特与2比特字符_Day26(84/300)_第2张图片



    def isOneBitCharacter_02(self, bits: List[int]) -> bool:    
    
        i, n = 0, len(bits) - 1
        
        while i < n:
            i += 1 + bits[i]
            
        return i == n

你可能感兴趣的:(Leetcode)