速度超过了100%的测试者啊哈哈,就是如果余数和上一个不一样就用2一直除下去,一样就返回false。
class Solution {
public:
bool hasAlternatingBits(int n) {
int flag = n % 2;
n = n / 2;
while (n > 0)
{
int tmp = n % 2;
if (tmp == flag) return false;
flag = tmp;
n = n / 2;
}
return true;
}
};
提供另外一个思路:
题目其实要求的是一个数每次除以2和之前的数字是一奇一偶,也就是差数为奇数,所以也有这样的写法:
class Solution {
public:
bool hasAlternatingBits(int n) {
if (n == 0 ) return false;
int tmp;
while (n!=0){
tmp = n >> 1;
if ((n - tmp) %2 == 0) return false; # early break
n = tmp;
}
return true;
}
};