有两种特殊字符:
第一种字符可以用一个比特 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 #输出结果