判断一个数的二进制表示是否总是 0、1 交替出现

211 阅读1分钟

给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。

    public boolean hasAlternatingBits(int n) {
        int preNumber = 2;
        while (n != 0) {
            int cur = n % 2;
            if (cur == preNumber) {
                return false;
            }
            preNumber = cur;
            n /= 2;
        }
        return true;
    }
}

不容易想到的解法:位运算

// a除去前导的0之外,其它数位全部都是1(为什么呢,因为如果a是二进制位交替出现的话,那右移一位就是原来是0的移到了原来是1的位置上  再异或 那不就全部都是1了吗)
  // 二进制位全部都是1的加上1  得到的二进制数多了最前面一个数位1其它都是0 再与全部是0的&与运算肯定是0
  class Solution {
    public boolean hasAlternatingBits(int n) {
        int a = n ^ (n >> 1);
        return (a & (a + 1)) == 0;
    }
}

答案来自力扣