序言
这题纯属练练位运算,思路比较简答,但是还是有点意思的。
题目描述
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1
输出: true
解释: 20 = 1
示例 2:
输入: 16
输出: true
解释: 24 = 16
示例 3:
输入: 218
输出: false
算法思路分析
对于任何一个数A,都可以将该数表示为任意二的幂次方的和,若A=101000B,则A可以表示为A=1*2^5+1*2^3,所以如果A是2的n次幂,那A一定是10…00B的形式,所以可以考虑位运算。
1.判断除了结尾是否是1,如果结尾是1且这个1不是开头的1,则可以判断该数不是2的幂。
2.所有数左移一位,再次重复步骤1。
3.所有位执行完毕,说明该数是2的幂
代码
bool isPowerOfTwo(int n){
if(n<=0)
return false;
while(n>0){
if(n!=1&&(n&1))
return false;
n=n>>1;
}
return true;
}
时间复杂度O(logn)