題目
給定一個整數,編寫一個函數來判斷它是否是 2 的冪次方。
示例 1:
輸入: 1
輸出: true
解釋: 2^0 = 1
示例 2:
輸入: 16
輸出: true
解釋: 2^4 = 16
示例 3:
輸入: 218
輸出: false
代碼實現
方法一:乘法解法
class Solution
{
public:
bool isPowerOfTwo(int n)
{
if(n == 1)
return true;
if(n > INT_MAX / 2)
{
if(n % 2 == 1)
return false;
else
n /= 2;
}
int a = 2;
while(a <= n)
{
if(a == n)
return true;
a *= 2;
}
return false;
}
};
方法二:除法解法
class Solution
{
public:
bool isPowerOfTwo(int n)
{
if(n <= 0)
return false;
while(n - 1)
if(n % 2 == 0)
n /= 2;
else
return false;
return true;
}
};
方法三:位運算解法
class Solution
{
public:
bool isPowerOfTwo(int n)
{
if(n <= 0)
return false;
return (n & (n - 1)) == 0;
}
};
實驗結果
方法一:乘法解法
執行結果:通過
執行用時 :0 ms, 在所有 C++ 提交中擊敗了100.00%的用戶
內存消耗 :8.1 MB, 在所有 C++ 提交中擊敗了17.45%的用戶
方法二:除法解法
執行結果:通過
執行用時 :4 ms, 在所有 C++ 提交中擊敗了77.43%的用戶
內存消耗 :7.9 MB, 在所有 C++ 提交中擊敗了71.35%的用戶
方法三:位運算解法
執行結果:通過顯示詳情
執行用時 :4 ms, 在所有 C++ 提交中擊敗了77.43%的用戶
內存消耗 :8.2 MB, 在所有 C++ 提交中擊敗了5.71%的用戶