问题描述:
Given an integer, write a function to determine if it is a power of two.
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
思路:
如果是power of two, 则2进制表达中,有且仅有一个1. 可以通过移位来数1的个数, 这里用了一个巧妙的办法, 即判断 N & (N-1) 是否为0.
代码:
class Solution {
public:
int hammingWeight(uint32_t n) {
if(n == 0)
{
return 0;
}
int array[32] = {0};
int i = 0;
while(n)
{
array[i++] = n % 2;
n = n / 2;
}
int count = 0;
for(int j = 0; j < 32; ++j)
{
if(array[j] == 1)
{
++count;
}
}
return count;
}
};
我开始想到的是上面这种方法,但是这种方法超时了,所以我又想到了以前看过《面试宝典》中一道题就是判断是否是一个数的平方,所以立刻就写下了下面的代码.
class Solution {
public:
bool isPowerOfTwo(int n) {
if(n <= 0)
{
return false;
}
else
{
return ((n & (n - 1)) == 0);
}
}
};
紧接着我看到了这样的代码:
class Solution {
public:
bool isPowerOfTwo(int n) {
return n > 0 && ((n & (n - 1)) == 0 );
};