1. 程式人生 > >leetcode 717. 1位元與2位元字元(python)

leetcode 717. 1位元與2位元字元(python)

有兩種特殊字元。第一種字元可以用一位元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.

思路:

這題應該反向推導,

1)倒數第一位是0;

2)倒數第二位如果是0 不用管其他的,肯定為"True",如果是1需要看第三位;

3)倒數第三位如果是0肯定為False,如果是1待定,繼續往下分析

。。。。

找出規律之後就是如何實現了,簡單來說就是我需要確定倒數第二個0的反向索引下標。如果是偶數數肯定為False,如果是奇數,答案為True

class Solution(object):
    def isOneBitCharacter(self, bits):
        """
        :type bits: List[int]
        :rtype: bool
        """
        bits_reverse = bits[::-1]
        bits_reverse.append(0)
        id1 = [i for i,x in enumerate(bits_reverse) if x==0]
        if id1[1] % 2 == 0:
            return False
        else:
            return True