717. 1 比特与 2 比特字符 - 力扣(LeetCode)


这个问题可以用贪心算法从头遍历 bits 数组来解决。核心思路如下:
-
我们从数组的起始位置开始遍历。
-
如果当前位置是
0,它表示的是 一比特字符,我们向前移动一位。 -
如果当前位置是
1,则它必须和下一位组成 两比特字符 (10或11),我们向前移动两位。 -
最后,检查遍历是否停在最后一个
0位置上,如果是,则返回true,否则返回false。
代码实现(Python)
def isOneBitCharacter(bits):
i = 0
n = len(bits)
while i < n - 1: # 避免越界,不检查最后一位
if bits[i] == 1:
i += 2 # 两比特字符跳两位
else:
i += 1 # 一比特字符跳一位
return i == n - 1 # 是否停在最后一个字符
示例
print(isOneBitCharacter([1, 0, 0])) # True
print(isOneBitCharacter([1, 1, 1, 0])) # False
复杂度分析
-
时间复杂度:O(n),因为我们只遍历一次数组。
-
空间复杂度:O(1),只用了常数级别的额外空间。
这样,我们就能快速判断最后一个字符是否是 一比特字符! 🚀
564

被折叠的 条评论
为什么被折叠?



