0693. Binary Number With Alternating Bits

693. Binary Number with Alternating Bits #

题目 #

给定一个正整数,检查其二进制表示是否总是 01 交替出现。换言之,二进制表示中相邻两位的数字永不相同。

思路 #

代码 #

class Solution {
    public boolean hasAlternatingBits(int n) {
        /** 先定位最高位的 1 */
        int start = 0;
        for (int i = 30; i >= 0; i--) {
            if (((n >> i) & 1) == 0) continue;
            start = i;
            break;
        }
        /** 判断数 n 的二进制表示中相邻两位的数字永不相同 */
        for (int i = start - 1, lastBit = ((n >> start) & 1); i >= 0; i--) {
            if (((n >> i) & 1) == lastBit) return false;
            lastBit = lastBit = 1 ? 0 : 1;
        }
        return true;
    }
}