717. 1 比特与 2 比特字符

有两种特殊字符:

第一种字符可以用一比特 0 表示
第二种字符可以用两比特(10 或 11)表示
给你一个以 0 结尾的二进制数组 bits ,如果最后一个字符必须是一个一比特字符,则返回 true 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/1-bit-and-2-bit-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

动态规划

class Solution {
    public boolean isOneBitCharacter(int[] bits) {
        if (bits == null || bits.length == 0) {
            return false;
        }
        if (bits[bits.length - 1] != 0) {
            return false;
        }
        boolean preOne = true, one = bits[0] == 0;
        boolean preTwo = true, two = false;
        // 1 2 3 [4]
        // 1 2 [3 4]
        for (int i = 1; i < bits.length; ++i) {
            boolean t1 = one;
            boolean t2 = two;
            one = bits[i] == 0 && (one || two);
            two = bits[i - 1] == 1 && (preOne || preTwo);
            preOne = t1;
            preTwo = t2;
        }
        return one && (preOne || preTwo) && !two;
    }
}

遍历

class Solution {
    public boolean isOneBitCharacter(int[] bits) {
        if (bits == null || bits.length == 0) {
            return false;
        }
        int i = 0;
        while (i < bits.length - 1) {
            i += bits[i] + 1;
        }
        return i == bits.length - 1;
    }
}
posted @ 2022-02-21 16:30  Tianyiya  阅读(55)  评论(0)    收藏  举报