Leetcode-717-1比特与2比特字符

Leetcode-717-1比特与2比特字符

题目描述:

有两种特殊字符。第一种字符可以用一比特0来表示。第二种字符可以用两比特(10 或 11)来表示。

现给一个由若干比特组成的字符串。问最后一个字符是否必定为一个一比特字符。给定的字符串总是由0结束。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
示例 1:

输入:
bits = [1, 0, 0]
输出: True
解释:
唯一的编码方式是一个两比特字符和一个一比特字符。所以最后一个字符是一比特字符。

示例 2:

输入:
bits = [1, 1, 1, 0]
输出: False
解释:
唯一的编码方式是两比特字符和两比特字符。所以最后一个字符不是一比特字符。

注意:

  • 1 <= len(bits) <= 1000.
  • bits[i] 总是01.

思路 : 线性扫描

  • 我们可以对bits数组从左到右扫描来判断最后一位是否是一比特字符
    • 当扫描到第i位的时候,如果bits[i] = 1, 那么说明这是一个两比特字符,那么将步长调整为2(也就是i的值加2)
    • 当扫描到第i位的时候,如果bits[i] = 0,说明这是个一比特字符,步长设置为1
1
2
3
4
5
6
7
8
9
class Solution {
public boolean isOneBitCharacter(int[] bits) {
int i = 0;
while (i < bits.length - 1) {
i += bits[i] + 1;
}
return i == bits.length - 1;
}
}

复杂度分析:

  • 时间复杂度:O(n),其中 n是 bits 数组的长度。
  • 空间复杂度:O(1)。
打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2019-2022 Zhuuu
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信