解题代码:
231:
classSolution {
public:
bool isPowerOfTwo(int n) {
returnn>0&&(n&(n-1))==0;
}
};
326:
classSolution {
public:
bool isPowerOfThree(int n) {
if(n<=0)
return false;
float a=log(n)/log(3);
int t=(int)a;
return pow(3,t)==n;
}
};
342:
classSolution {
public:
bool isPowerOfFour(int num) {
returnnum>0&&(num&(num-1))==0&&(num-1)%3==0;
}
};
解题思路:
三个题目比较相似,要求判断输入的数字是否分别为2、3、4的幂。若n是2的幂,不难发现,n的二进制表示形式必然为1开头,后面加上若干个0,假设为b个,则n-1必然为b个1,因此n与n-1做与运算所得结果必然为0。而对于若n为4的幂,除了在它为2的幂的基础上,还存在一个特性,就是n-1必然为3的倍数。
最后,对于n为3的幂。暂时并未发现数字上的特性,因此,采取较为传统的方法,先求出log3(n)的值,然后将此值取整,得到t再求3的t次方,若得出的结果等于n,则表明n为3的幂。