Given an integer, write a function to determine if it is a power of two.
方法一、
迭代判断n/2是不是2的乘幂
<pre name="code" class="cpp">class Solution {
public:
bool isPowerOfTwo(int n) {
if(n==1 || n==2) return true;
if(n<1) return false;
if(n%2 !=0) return false;
return isPowerOfTwo(n/2);
}
};
方法二、
如果n是2的乘幂,则其二进制表示中只有一个1,我们可以统计其中的1的个数。
class Solution {
public: <pre name="code" class="cpp"> bool isPowerOfTwo(int n) {
<span style="white-space:pre"> </span>int count = 0;
<span style="white-space:pre"> </span>while (n > 0) {
<span style="white-space:pre"> </span>count+=(n&0x01);
<span style="white-space:pre"> </span>n>>=1;
<span style="white-space:pre"> </span>}
return count==1;
}
};
方法三、
如果n是2的乘幂,则其二进制表示中只有最高位是1,其他都是0,我们只需将n 和(n-1)求与,若结果为0,则true。
class Solution {
public:
bool isPowerOfTwo(int n) {
return (n>0) && (!(n&(n-1)));
}
};
github代码:
https://github.com/Sublele/LeetCode-in-Cpp/tree/master/231-Power-of-Two