题解:
- 循环判断法
- 递归判断法
- 性质法:2的幂对应的二进制数,一定有且只有一个1。
代码:
class Solution {
public:
bool isPowerOfTwo(int n) {
/* 1. 循环解法
long long tmp = 1;// 可能num接近INT_MAX,但是tmp*2可能会超出INT_MAX。
for(int i = 0; ; i++)
{
if(tmp == n)
{
return true;
}
if(tmp > n)
{
return false;
}
tmp *= 2;
}*/
/* 2. 递归解法
return isPowerOfFourSubFun(1,n);
*/
/* 3. 性质法(二的幂方的数 对应的二进制数中 一定有且只有一个1) */
int cnt = 0;
while(n)
{
if(n % 2 == 1)
{
cnt++;
}
if(cnt > 1)
{
break;
}
n /= 2;
}
if(cnt == 1)
{
return true;
}
else
{
return false;
}
}
/* 2. 递归解法 */
bool isPowerOfFourSubFun(long long x,int num)
{
if(x == num)
{
return true;
}
if(x > num)
{
return false;
}
return isPowerOfFourSubFun(x*2,num);
}
};