题目:
Given an integer, write a function to determine if it is a power of two.
思路:
2的幂的二进制表示有一个特点,就是除了最高位是1之外,其余的位置上都是0,依据这个特点,可以设计如下两个算法:
1、逐位判断:依次获取n的非最高位的值,一旦发现不是0,就返回false。这在算法实现上可以采用&和>>来实现。
2、一次判断:n & (n-1)的作用是将n的最低位上的1变成0。所以n是2的幂的充要条件就是 (n & (n - 1)) == 0。实现起来只需要一行代码。
不过大家需要注意,在C++中位操作的优先级比较低,所以记得加括弧^_^。
代码:
1、逐位判断:
class Solution {
public:
bool isPowerOfTwo(int n) {
if (n <= 0) {
return false;
}
while (n > 1) {
if ((n & 1) != 0) {
return false;
}
n = (n >> 1);
}
return true;
}
};
2、一次判断:
class Solution {
public:
bool isPowerOfTwo(int n) {
if (n <= 0) {
return false;
}
return (n & (n - 1)) == 0;
}
};