#1. brute force 的解法
class Solution {
public:
bool isPowerOfTwo(int n) {
if (n < 1) return false;
while (n > 2) {
if (n % 2) return false;
n = n/2;
}
return true;
}
};#2. 提示里写到用位运算,2的次方数转换为bit后第一位是1,其余位都是0,因此可以从右向左找1的比特位,若找到1且右移后,但数字并不为零,则不是2的次方数。
class Solution {
public:
bool isPowerOfTwo(int n) {
if (n < 1) return false;
while (n) {
int t = n & 1;
n >>= 1;
if (t && n) return false;
}
return true;
}
};#3. 同样利用上面的属性,n-1二进制数应该比n少一位,且每位都是1,所以只要n与n-1为0,n就是2的次方数。
class Solution {
public:
bool isPowerOfTwo(int n) {
if (n < 1) return false;
return !(n & (n - 1));
}
};
本文介绍三种方法来判断一个整数是否可以表示为2的幂次:使用循环除以2直到不能整除;通过位运算从右向左检查比特位;以及利用2的幂次减一后的特性进行快速判断。
697

被折叠的 条评论
为什么被折叠?



