力扣刷题记录#数组#简单717. 1比特与2比特字符

本文介绍了一种特殊的字符编码方式,其中第一种字符使用一比特0表示,第二种字符使用两比特(10或11)表示。通过遍历给定的比特串,判断最后一个字符是否为一比特字符。文章提供了详细的算法解析和Python实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

有两种特殊字符。第一种字符可以用一比特0来表示。第二种字符可以用两比特(10 或 11)来表示。
现给一个由若干比特组成的字符串。问最后一个字符是否必定为一个一比特字符。
给定的字符串总是由0结束。

示例

输入: bits = [1, 0, 0]
输出: True
解释: 唯一的编码方式是一个两比特字符和一个一比特字符。所以最后一个字符是一比特字符。

输入: bits = [1, 1, 1, 0]
输出: False
解释: 唯一的编码方式是两比特字符和两比特字符。所以最后一个字符不是一比特字符。

解答

从第一位开始遍历数组,用i指示每个字符的第一位
如果字符的第一位是0,则它只能是一比特字符,下一个字符从i+1开始
如果字符的第一位是1,则它只能是两比特字符,i+1是这一字符的第二位,下一个字符从i+2开始
循环的结束条件是i<length-1,即不遍历数组最后一个元素
数组最后一个元素是0,如果它是一个一比特字符,则循环结束后i会指向它(i=length-1);若它是一个两比特字符的第二位,则循环结束后i指向它后面(i=length)

class Solution(object):
    def isOneBitCharacter(self, bits):
        """
        :type bits: List[int]
        :rtype: bool
        """
        length = len(bits)
        
        if length==1:
            return True
        
        i = 0
        # 从第一个遍历到倒数第二个,若是0,i+1;若是1,i+2
        # 最后一位都是0
        # 如果最后一位必须是0,则遍历完前面的,i恰好指向最后一个元素(i=length-1)
        # 如果最后一位不须是0,则遍历完前面的,i指向空(i=length)
        while i<(length-1):
            if bits[i]==0:
                i = i + 1
            if bits[i]==1:
                i = i + 2
                
        if i==length-1:
            return True
        else:
            return False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值