这个问题,不允许使用循环和递归,那么首先想到的就是位运算。只有位运算才能满足条件。
进一步的,有一个性质:如果一个数是2的幂,那么num&(num-1) == 0。
我们可以根据这个性质,首先排除不是2的幂的数字。然后再分析发现,如果是4的幂,那么其中的位的1,只会出现在一个4位二进制的第1位,或者第3位。比如4(0100),16(0001,0000)。所以将数对0x55555555做与运算即可。
class Solution {
public:
bool isPowerOfFour(int num) {
if(num <= 0) return false;
if(num & (num - 1)) return false;
if(num & 0x55555555) return true;
return false;
}
};