原题链接
题目描述:
给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等。示例 1:输入: 5输出: True解释:5的二进制数是: 101示例 2:输入: 7输出: False解释:7的二进制数是: 111示例 3:输入: 11输出: False解释:11的二进制数是: 1011示例 4:输入: 10输出: True解释:10的二进制数是: 1010
解:
我的解:
public static boolean hasAlternatingBits(int n) {
int flag = n & 1;
n >>= 1;
while (n > 0) {
if ((n & 1) == flag) {
return false;
}
flag = n & 1;
n >>= 1;
}
return true;
}
大佬的解:
对于 1010 这种位级表示的数,把它向右移动 1 位得到 101,这两个数每个位都不同,因此异或得到的结果为 1111。
public boolean hasAlternatingBits(int n) {
int a = (n ^ (n >> 1));
return (a & (a + 1)) == 0;
}
