717. 1-bit and 2-bit Characters

We have two special characters. The first character can be represented by one bit 0. The second character can be represented by two bits (10 or 11).

Now given a string represented by several bits. Return whether the last character must be a one-bit character or not. The given string will always end with a zero.

Example 1:

Input: 
bits = [1, 0, 0]
Output: True

Example 2:

Input: 
bits = [1, 1, 1, 0]
Output: False

本题大意就是:只有3种输入规则,11、10、0,如果数组中最后一个的输入规则为 “0”,则返回true,否则false;

方法一:

由于只有三种输入规则,进行判断时,如果遇到 1 ,则 i+2,如果遇到 0,则 i+1;

那么每次检验的都会是 规则 中第一个数字。排除最后一个元素进行(i+1 / i+2)的遍历,当遍历最后一遍恰好到倒数第二的时候,如果它是 ‘0’,则返回true,此时 i = length-1;如果是 ‘1’,则返回 false,此时 i = length;当遍历最后一遍恰好到倒数第三的时候,如果它只能是‘1’,则i = length-1,返回true。

public static boolean isOneBitCharacter(int[] bits){
        int i = 0;
        while (i < bits.length-1){
            if (bits[i] == 0){
                i += 1;
                continue;
            }
            if (bits[i] == 1){
                i += 2;
                continue;
            }
        }
        return i == bits.length-1;
    }

方法二:

从后向前进行检验,[......,1,0] or [.......,0,0] or [.......,0,1,1,0] or [......1,0,0] or [.....,0,1,1,1,0]。那么开始的时候,i = length-2,意味着一开始 (从后往前算)存在两个元素, 观察 bit[i]是否等于1, 如果等于1, i--,也就是说遇到一个 1,存在的元素就会 +1;如果存在的元素 最后是奇数的话,数组最后的规则就是 10。举例:[.....,0,1,1,1,0],存在的元素是奇数,所以规则为 ....11,10。返回false。

public static boolean isOneBitCharacter(int[] bits){
        int i = bits.length-2;
        while (i>=0&& bits[i] > 0){
            i--;
        }
        return (bits.length - i) % 2 == 0;
    }

阅读更多
文章标签: leetCode java
个人分类: java
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭