0717. 1 比特与 2 比特字符
大约 2 分钟
---
0717. 1 比特与 2 比特字符
- 标签:数组
- 难度:简单
题目链接
题目大意
描述:
有两种特殊字符:
- 第一种字符可以用一比特 表示
- 第二种字符可以用两比特( 或 )表示
给定一个以 结尾的二进制数组 。
要求:
如果最后一个字符必须是一个一比特字符,则返回 true。
说明:
- 。
- 为 或 。
示例:
- 示例 1:
输入: bits = [1, 0, 0]
输出: true
解释: 唯一的解码方式是将其解析为一个两比特字符和一个一比特字符。
所以最后一个字符是一比特字符。- 示例 2:
输入:bits = [1,1,1,0]
输出:false
解释:唯一的解码方式是将其解析为两比特字符和两比特字符。
所以最后一个字符不是一比特字符。解题思路
思路 1:贪心算法
这道题的关键在于理解字符的编码规则:
- 一比特字符:
0 - 两比特字符:
10或11
由于数组以 0 结尾,我们需要判断这个 0 是作为一比特字符单独存在,还是作为两比特字符的一部分。
解题步骤:
- 从数组开头开始遍历,使用指针 记录当前位置。
- 如果 ,说明当前是两比特字符,跳过两位( 增加 )。
- 如果 ,说明当前是一比特字符,跳过一位( 增加 )。
- 当 到达倒数第二个位置时停止遍历。
- 如果 正好等于 (最后一个位置),说明最后一个
0是一比特字符,返回True。 - 如果 超过了 ,说明最后一个
0是两比特字符的一部分,返回False。
思路 1:代码
class Solution:
def isOneBitCharacter(self, bits: List[int]) -> bool:
n = len(bits)
i = 0
# 遍历到倒数第二个位置
while i < n - 1:
if bits[i] == 1: # 两比特字符
i += 2
else: # 一比特字符
i += 1
# 如果 i 正好等于 n - 1,说明最后一个 0 是一比特字符
return i == n - 1思路 1:复杂度分析
- 时间复杂度:,其中 是数组 的长度。需要遍历整个数组一次。
- 空间复杂度:。只使用了常数个额外变量。