思路
0、1交替出现无非就两种情况
n = ……101010 :偶数
n = 0+2+8+32+128+…
n = ……010101 :奇数
n = 1+4+16+64+256+…
每迭代一次, 就从前面减去一个数
若n属于上述两种情况, 则一定会在某一次迭代被减为0
若不属于, 则会被减为负数
待优化
1、可在迭代过程中添加一个判断: 相邻数字相等则跳出循环,(相等意味着0、1并未交替出现)
代码
bool hasAlternatingBits(long n){
long t=1+(n%2==0);
while(n > 0){
n-=t;
t*=4;
}
return n==0;
}