1. 程式人生 > >LeetCode 717. 1位元與2位元字元(C、C++、python)

LeetCode 717. 1位元與2位元字元(C、C++、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.

C

bool isOneBitCharacter(int* bits, int bitsSize) 
{
    int n=bitsSize;
    int tmp=0;
    for(int i=0;i<n-1;i++)
    {
        if(1==bits[i])
        {
            if(1==tmp)
            {
                tmp=0;
            }
            else
            {
                tmp=1;
            }
        }
        else
        {
            if(1==tmp)
            {
                tmp=0;
            }
        }
    }
    return 0==tmp;
}

C++

class Solution {
public:
    bool isOneBitCharacter(vector<int>& bits) 
    {
        int n=bits.size();
        stack<int> tmp;
        for(int i=0;i<n-1;i++)
        {
            if(1==bits[i])
            {
                if(tmp.empty())
                {
                    tmp.push(1);
                }
                else
                {
                    tmp.pop();
                }
            }
            else
            {
                if(!tmp.empty())
                {
                    tmp.pop();
                }
            }
        }
        return true==tmp.empty();        
    }
};

python

class Solution:
    def isOneBitCharacter(self, bits):
        """
        :type bits: List[int]
        :rtype: bool
        """
        n=len(bits)
        tmp=0
        for i in range(0,n-1):
            if 1==bits[i]:
                if 0==tmp:
                    tmp=1
                else:
                    tmp=0
            else:
                if 1==tmp:
                    tmp=0
        return 0==tmp