给定一个正整数,检查它的二进制表示是否总是 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;
}
}
答案来自力扣