LeetCode笔记--数组(7)

1-bit and 2-bit Characters

LeetCode笔记--数组(7)_第1张图片

LeetCode笔记--数组(7)_第2张图片

一个数组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

 

你可能感兴趣的:(LeetCode笔记--数组(7))