题目
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1
输出: true
解释: 20 = 1
示例 2:
输入: 16
输出: true
解释: 24 = 16
示例 3:
输入: 218
输出: false
来源:力扣(LeetCode)
解题思路
如果一个数是2的幂, 它与上一位进行与运算的结果为0. 比如16的二进制表示为0b1000, 16的上一位为0b0111, 0b1000 & ob0111 = 0.
Swift解法
class Solution {
func isPowerOfTwo(_ n: Int) -> Bool {
return n > 0 && (n & (n-1) == 0)
}
}
C++解法
class Solution {
public:
bool isPowerOfTwo(int n) {
return n > 0 && !(n & (n - 1));
}
};
还有另一种解法:不断将数字右移,如果遇到尾数是1记录下来,如过数字还大于0说明不是二的幂。
class Solution {
public:
bool isPowerOfTwo(int n) {
bool containsOne = false;
int num = n;
while (num > 0) {
if (containsOne) return false;
containsOne = num & 1;
num >>= 1;
}
return containsOne;
}
};