给定一个整数,写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1
输出: true
示例 2:
输入: 16
输出: true
示例 3:
输入: 218
输出: false
分析:
- 负数一定不是2的幂
- 2的整数次幂对应的二进制数只含有0个或者1个1
- 时间复杂度:O(n) 空间复杂度:O(1)
class Solution {
public:
bool isPowerOfTwo(int n) {
if(n<0) return false;
bool hasOne = false;
while(n>0){
if(n&1){
if(hasOne){
return false;
}else{
hasOne = true;
}
}
n>>=1;
}
return hasOne;
}
};