Given a positive integer, check whether it has alternating bits: namely, if two adjacent bits will always have different values.
Example 1:
Input: 5 Output: True Explanation: The binary representation of 5 is: 101
Example 2:
Input: 7 Output: False Explanation: The binary representation of 7 is: 111.
Example 3:
Input: 11 Output: False Explanation: The binary representation of 11 is: 1011.
Example 4:
Input: 10 Output: True Explanation: The binary representation of 10 is: 1010.思路:用11相与获得末两位,再与10比,相等则左移两位,不然返回false
代码1:
class Solution {
public:
bool hasAlternatingBits(int n) {
if (n%2){
unsigned long long j=1;
while(j<=n){
n ^=j;
j=(j<<2);
}
}
else{
unsigned long long j=2;
while(j<=n){
n ^=j;
j=(j<<2);
}
}
if (n==0){
return true;
}
else{
return false;
}
}
};
代码2:
class Solution {
public:
bool hasAlternatingBits(int n) {
if(n==1){return true;}
if(n%2){n = n>>1;}
while((n&3)==2){
n = n>>2;
if(n==0){return true;}
}
return false;
}
};
代码3:
class Solution {
public:
bool hasAlternatingBits(int n) {
return !((n ^= n/4) & n-1);
}
};