題解:
- 循環判斷法
- 遞歸判斷法
- 性質法: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);
}
};