Q:给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1
输出: true
解释: 20 = 1
运用位运算就可以很快的解出来。
因为2的幂次都是1,10,100,1000,10000
所以如果是2的幂次,则n&(n-1)=0
代码如下:
class Solution {
public:
bool isPowerOfTwo(int n) {
if(n <= 0 ) return false;
return !(n&(n-1));
}
};
又尝试了一下不用位运算解这道题:
class Solution {
public:
bool isPowerOfTwo(int n) {
int a=0,i=0;
while(a<n)
{
a=pow(2,i);
i++;
}
if(a%n==0)
return true;
else
return false;
}
};
最后超出了时间限制,最后测试的数据如下,可能因为测试的数据太大了,所以超出了时间限制。所以还是位运算效率高一些。