题目
思路 模拟
根据题意逐位判断。
代码
class Solution {
public:
bool hasAlternatingBits(int n) {
bool flag = n & 1;
while(n){
n >>= 1;
if(flag ^ (n & 1) == 0)
return false;
flag = n & 1;
}
return true;
}
};
思路 位运算
将n右移一位可以得到和n错一位的结果,两者异或就是0000...1111的结果x,将x加1,再与x按位与,可以得到全0的结果。
代码
class Solution {
public:
bool hasAlternatingBits(int n) {
long x = n ^ (n >> 1);
return (x & (x + 1)) == 0;
}
};
注意按位与的优先级比判断等于的优先级低,要加括号。