题目
给定一个整数,编写一个函数来判断它是否是 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%的用户