文章目录
- 一【题目类别】
- 二【题目难度】
- 三【题目编号】
- 四【题目描述】
- 五【题目示例】
- 六【题目提示】
- 七【解题思路】
- 八【时空频度】
- 九【代码实现】
- 十【提交结果】
一【题目类别】
- 数组
二【题目难度】
- 简单
三【题目编号】
- 717.1比特与2比特字符
四【题目描述】
- 有两种特殊字符:
- 第一种字符可以用一比特
0
表示 - 第二种字符可以用两比特(
10
或11
)表示
- 第一种字符可以用一比特
- 给你一个以
0
结尾的二进制数组bits
,如果最后一个字符必须是一个一比特字符,则返回true
。
五【题目示例】
-
示例 1:
- 输入: bits = [1, 0, 0]
- 输出: true
- 解释: 唯一的解码方式是将其解析为一个两比特字符和一个一比特字符。
所以最后一个字符是一比特字符。
-
示例 2:
- 输入:bits = [1,1,1,0]
- 输出:false
- 解释:唯一的解码方式是将其解析为两比特字符和两比特字符。
所以最后一个字符不是一比特字符。
六【题目提示】
1 <= bits.length <= 1000
bits[i]
为0
或1
七【解题思路】
- 本题的思路比较简单,根据题意去模拟整个过程即可:
- 若当前位为0,那么一定可以组成第一种字符,那么单指针向后移动一位
- 若当前位位1,那么一定可以组成第二种字符,那么单指针向后移动两位
- 最后若单指针可以落在数组最后一个位置,那么就说明符合题意
- 最后返回结果即可
- 所以整个题目就是模拟+单指针移动的过程
- 具体细节可以参考下面的代码
八【时空频度】
- 时间复杂度: O ( n ) O(n) O(n), n n n为传入的数组的长度
- 空间复杂度: O ( 1 ) O(1) O(1)
九【代码实现】
- Java语言版
class Solution {
public boolean isOneBitCharacter(int[] bits) {
// 初始化index为0,表示当前扫描的位
int index = 0;
// 获取数组的长度
int n = bits.length;
// 遍历数组直到倒数第二个元素
while (index < n - 1) {
// 如果当前位是0,说明这是一个1位字符,index向后移动1位
if (bits[index] == 0) {
index += 1;
}
// 如果当前位是1,说明这是一个2位字符,index向后移动2位
else if (bits[index] == 1) {
index += 2;
}
}
// 如果index正好到了数组的最后一位,则返回true,表示最后一个字符是1位字符
return index == n - 1;
}
}
- Python语言版
class Solution:
def isOneBitCharacter(self, bits: List[int]) -> bool:
# 初始化index为0,表示当前扫描的位
index = 0
# 获取数组的长度
n = len(bits)
# 遍历数组直到倒数第二个元素
while index < (n - 1):
# 如果当前位是0,说明这是一个1位字符,index向后移动1位
if bits[index] == 0:
index += 1
# 如果当前位是1,说明这是一个2位字符,index向后移动2位
elif bits[index] == 1:
index += 2
# 如果index正好到了数组的最后一位,则返回true,表示最后一个字符是1位字符
return index == n - 1
- C语言版
bool isOneBitCharacter(int* bits, int bitsSize)
{
// 初始化index为0,表示当前扫描的位
int index = 0;
// 获取数组的长度
int n = bitsSize;
// 遍历数组直到倒数第二个元素
while (index < (n - 1))
{
// 如果当前位是0,说明这是一个1位字符,index向后移动1位
if (bits[index] == 0)
{
index += 1;
}
// 如果当前位是1,说明这是一个2位字符,index向后移动2位
else if (bits[index] == 1)
{
index += 2;
}
}
// 如果index正好到了数组的最后一位,则返回true,表示最后一个字符是1位字符
return index == n - 1;
}
十【提交结果】
-
Java语言版
-
Python语言版
-
C语言版