大家好,我是 @负雪明烛。👈👈 点击关注,优质题解不间断。
题目大意
有两种字符,一种是 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 = 0while pos < len(bits) - 1:pos += 2 if bits[pos] == 1 else 1return 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】代码模板,刷题必会
