LeetCode每日一题题解:717. 1比特与2比特字符-倒序法

简介: LeetCode每日一题题解:717. 1比特与2比特字符-倒序法

有两种特殊字符:


第一种字符可以用一个比特 0 来表示

第二种字符可以用两个比特(10 或 11)来表示、

给定一个以 0 结尾的二进制数组 bits ,如果最后一个字符必须是一位字符,则返回 true


示例 1:


输入: bits = [1, 0, 0]

输出: true

解释: 唯一的编码方式是一个两比特字符和一个一比特字符。

所以最后一个字符是一比特字符。

示例 2:


输入: bits = [1, 1, 1, 0]

输出: false

解释: 唯一的编码方式是两比特字符和两比特字符。

所以最后一个字符不是一比特字符。


题解:看不懂题的请看我上一篇博客(解释的很清楚)-这篇博客是用的更好的方法,上一篇是暴力-这篇采用的是倒叙法-由题意可知道每个列表的最后一个必为0,那么我们可以先找到倒数第二个0,设他的位置为 i ,下一个为i+1,n为列表的长度,i +1到n - 2 直接的字符数为 n - i - 2,如果n - i - 2 为偶数(因为 1 和1  1 和0 只要是偶数个必定可以组成完整的2比特币 ),那么最后的0肯定可以剩下,即为满足题意要求,为true,否则为false。如果为奇数,则会吃掉最后的0,返回false。

class Solution:
    def isOneBitCharacter(self, bits: List[int]) -> bool:
        n = len(bits)  #求列表长度
        i =  n - 2    #初始i的位置为 n-2
        while i >= 0 and bits[i]:  #循环遍历,当bit[i]为0的时候 跳出循环
            i -= 1
        return (n-i)%2 == 0  #输出结果
相关文章
|
1天前
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串
【LeetCode刷题】滑动窗口思想解决问题:长度最小的子数组、无重复字符的最长子串
|
4天前
|
存储 算法 数据可视化
深入解析力扣161题:相隔为 1 的编辑距离(逐字符比较与动态规划详解)
深入解析力扣161题:相隔为 1 的编辑距离(逐字符比较与动态规划详解)
|
4天前
|
存储 算法 数据可视化
深入解析力扣157题:用Read4高效读取N个字符(多种解法与详细图解)
深入解析力扣157题:用Read4高效读取N个字符(多种解法与详细图解)
|
4天前
|
存储 算法 数据可视化
深入解析力扣159题:至多包含两个不同字符的最长子串(滑动窗口法详细图解)
深入解析力扣159题:至多包含两个不同字符的最长子串(滑动窗口法详细图解)
|
5天前
|
存储 算法 数据挖掘
LeetCode 第三题:无重复字符的最长子串 详解 【3/1000】
LeetCode 第三题:无重复字符的最长子串 详解 【3/1000】
|
30天前
|
机器学习/深度学习 索引
【力扣】387. 字符串中的第一个唯一字符
【力扣】387. 字符串中的第一个唯一字符
|
30天前
|
算法
每日一题:LeetCode-LCR 016. 无重复字符的最长子串
每日一题:LeetCode-LCR 016. 无重复字符的最长子串
|
30天前
|
网络协议
《 LeetCode 热题 HOT 100》——无重复字符的最长子串
《 LeetCode 热题 HOT 100》——无重复字符的最长子串
|
30天前
|
存储 算法 Go
LeetCode 第三题: 无重复字符的最长子串
  给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。