大家好,我是 @负雪明烛。👈👈 点击关注,优质题解不间断。
题目大意
有两种字符,一种是 0
,一种是10
或者11
。
给出了一个由这两种字符组成的数组,判断最后一位的数字是否一定是单个的 0
.
解题方法
遍历
有两种字符串,一种是 0
,一种是 10
或 11
。即一种长度是1,一种长度是2.
所以找个指针然后遍历一遍,看看当前值是 0
还是1
,是 0
走一步,是1
走两步。
题目告诉了数组的最后一个元素一定是 0
,所以最后如果恰好到达len-1
,说明最后一个数字的长度为 1 ,也就是 0
,就满足题意了。
代码如下:
class Solution(object):
def isOneBitCharacter(self, bits):
"""
:type bits: List[int]
:rtype: bool
"""
pos = 0
while pos < len(bits) - 1:
pos += 2 if bits[pos] == 1 else 1
return pos == len(bits) - 1
class Solution {
public:
bool isOneBitCharacter(vector<int>& bits) {
const int N = bits.size();
int pos = 0;
while (pos < N - 1) {
pos += bits[pos] == 1 ? 2 : 1;
}
return pos == N - 1;
}
};
class Solution {
public boolean isOneBitCharacter(int[] bits) {
int N = bits.length;
int pos = 0;
while (pos < N - 1) {
pos += bits[pos] == 1 ? 2 : 1;
}
return pos == N - 1;
}
}
日期
- 时间复杂度:$O(N)$,其中 $N$ 是数组长度;
- 空间复杂度:$O(1)$。
总结
我是 @负雪明烛 ,刷算法题 1000 多道,写了 1000 多篇算法题解,收获阅读量 300 万。关注我,你将不会错过我的精彩动画题解、面试题分享、组队刷题活动,进入主页 @负雪明烛 右侧有刷题组织,从此刷题不再孤单。
- 在刷题的时候,如果你不知道该怎么刷题,可以看 LeetCode 应该怎么刷?
- 如果你觉得题目太多,想在短时间内快速提高,可以看 LeetCode 最经典的 100 道题。
- 送你一份刷题的代码模板:【LeetCode】代码模板,刷题必会