题目链接:https://leetcode-cn.com/problems/power-of-two/
题目描述
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1
输出: true
解释: 20 = 1
示例 2:
输入: 16
输出: true
解释: 24 = 16
示例 3:
输入: 218
输出: false
思路
1 求2的底数并检验
class Solution {
public:
bool isPowerOfTwo(int n) {
if(n <= 0) return false;
if(n == 1) return true;
int tmp = log2(n) ;
return int(pow(2,tmp)) == n;
}
};
2 统计位1的次数
如果是2的幂,必然只有一位为1;n&(n-1)
位运算能将n最右边的1置为0,判断该数是否为0即可
class Solution {
public:
bool isPowerOfTwo(int n) {
return n>0? !(n&(n-1)): false;
}
};