LeetCode717. 1比特与2比特字符(python3)
Posted 南岸青栀*
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode717. 1比特与2比特字符(python3)相关的知识,希望对你有一定的参考价值。
717. 1比特与2比特字符
法1:设置标志位,遍历数组。遇1索引加2,遇0索引加1
class Solution:
def isOneBitCharacter(self, bits: List[int]) -> bool:
index = 0
while index<len(bits):
if bits[index] == 1:
index += 2
flag = False
else:
index += 1
flag = True
return flag
优化优化:
既然bits数组中都是0,1则完全可以利用这些数字,写成一个统一的表达式index += bits[index] + 1
class Solution:
def isOneBitCharacter(self, bits: List[int]) -> bool:
#优化法1
index = 0
while index<len(bits)-1:
print(index)
index += bits[index] + 1
return index == len(bits)-1
法3:贪心,最后一位一定要为0,不然一定不会满足;
最后一位为0后,判断之前连续的1的个数,如果为奇数则说明为11,10;如果为偶数,则说明,11,11,0
class Solution:
def isOneBitCharacter(self, bits: List[int]) -> bool:
#法3:贪心查看最后一位是否为0,查看最后一位之前的1的个数
count,i = 1,len(bits)-1
if bits[i]:
return False
else:
i = i-1
while True:
if bits[i] == 1:
count +=1
i -= 1
else: break
print(count)
return count%2-1 == 0
没有很大区别,就是想用三目运算
class Solution:
def isOneBitCharacter(self, bits: List[int]) -> bool:
#法3:贪心查看最后一位是否为0,查看最后一位之前的1的个数
count,i = 0,len(bits)-1
if bits[i]: return False
else:
i = i-1
while True:
if bits[i] == 1:
count +=1
i -= 1
else: break
return count%2 == 0 if count!=0 else count == 0
法4:能迭代,一定能递归,
class Solution:
def isOneBitCharacter(self, bits: List[int]) -> bool:
return False if not bits or bits == [[1, 0]] else True if bits == [0] else self.isOneBitCharacter(bits[1:]) if bits[0] == 0 else self.isOneBitCharacter(bits[2:])
以上是关于LeetCode717. 1比特与2比特字符(python3)的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 717 1比特与2比特字符[循环] HERODING的LeetCode之路
LeetCode 717. 1 比特与 2 比特字符 / 838. 推多米诺 / 1994. 好子集的数目(状态压缩动态规划)