1比特与2比特字符

此博客链接:https://www.cnblogs.com/ping2yingshi/p/14286560.html

1比特与2比特字符

题目链接:https://leetcode-cn.com/problems/1-bit-and-2-bit-characters/

题目

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

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

示例 1:

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

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

题解

此题的字符只有两种,第一种是一个字符只含有一个比特,第二种是一个字符含有两个比特,而且这两个比特只能由10或者11表示。所以这题先判断给定的数组的长度是奇数还是偶数,只有是奇数,并且前面的字符都是满足10或者11组合的数组,才能输出true。

代码

错误代码

class Solution {
    public boolean isOneBitCharacter(int[] bits) {
        if(bits.length%2==0)
        {
            return false;
        }
        else{
            for(int i=0;i<bits.length-1;i=i+2)
            {
                if(bits[i]!=1)
                    return false;
            }
        }
        return true;
    }
}

1比特与2比特字符

 

 我好像理解错题意了,这好像不需要只是最后是一个比特,可以都是一个比特组成,问题出在,如果前面有1的话,只能由两个比特组成,如果前面是0,可以由但是0组成。

正确代码

思路

先判断最后一位是否为1,如果是1,则返回false,然后从头开始遍历数组,如果遇到数组元素等于1,则接着遍历后两个元素,如果元素等于0,则遍历后一个元素,直到遍历到数组的最后,如果i的值等于数组长度减一,则说明数组最后一次遍历的是0,返回true,如果i的值不能与数组减一,则说明数组最后一次遍历的是1,则返回false.

class Solution {
    public boolean isOneBitCharacter(int[] bits) {
        if(bits[bits.length-1]==1)
        {
            return false;
        }
       int i=0;
        for(i=0;i<bits.length-1;)
        {
                if(bits[i]==1)
                   i=i+2;
                else 
                    i++;
        }
        if(i!=bits.length-1)
          return false;
        return true;
    }
}

 

结果

1比特与2比特字符

 

上一篇:Bits Reverse(贪心、位运算)


下一篇:提取并合并不同字节中的位c c