直接循环的做法就不说了
从二进制入手,很明显,对于4的幂,1只允许出现一次,而且是在偶数位上。操作上就是用1<<的方法就挨个获得该位置上的数,我的问题主要是:
判断条件我已开始写的:if(num & (1<<index)==1 )
这是错的,==优先级为9,&优先级为10,所以并不会如期望的那样先做&再做==,这个点错过很多次了。
class Solution {
public:
bool isPowerOfFour(int num) {
if(num == 0) return false;
// while(num%4 == 0)
// num = num >> 2;
// return num == 1;
bool flag = false;
for(size_t index = 0; index < 32; ++index){
if(num & (1<<index)){
if(index%2)
return false;
else{
if(flag)
return false;
flag = true;
}
}
}
return true;
}
};