题目描述:
给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等。
示例 1:
输入: 5
输出: True
解释:
5的二进制数是: 101
示例 2:
输入: 7
输出: False
解释:
7的二进制数是: 111
示例 3:
输入: 11
输出: False
解释:
11的二进制数是: 1011
示例 4:
输入: 10
输出: True
解释:
10的二进制数是: 1010
解法:
class Solution {
public:
// method 1:
bool hasAlternatingBits1(int n) {
bool one = false;
if(n&1){
one = true;
n >>= 1;
}else{
one = false;
n >>= 1;
}
while(n){
if(n&1){
if(one){
return false;
}else{
one = !one;
}
}else{
if(!one){
return false;
}else{
one = !one;
}
}
n >>= 1;
}
return true;
}
// method 2:
bool hasAlternatingBits2(int n) {
long long val = n;
val ^= (val/2); // should contain only ones
return ((val+1)&n) == 0;
}
bool hasAlternatingBits(int n) {
return hasAlternatingBits2(n);
}
};