方法一:判断模
核心思路:判断 n%2
是不是偶数即可
python
class Solution:
def poweroftwo(self , n: int) -> bool:
while n>1 and n%2 == 0:
n /= 2
if n == 1:
return True
else:
return False
c++
class Solution {
public:
bool poweroftwo(int n) {
// write code here
while(n>1 && n%2==0){
n /= 2;
}
if(n==1){
return true;
}else{
return false;
}
}
};
题的本意应该是考察位运算,推荐大家学习下面的方法
方法二:位运算
大家可以自己打开电脑的计算器,或者自己手算一下,2的整数次幂二进制形式一定是只有一个1的
例如:(十进制|二进制)—— (4|0100)(8|1000)
我们将其与n-1
进行 (“与” 运算),例如(3|0011)(7|0111)
注:(“与” 运算)如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;
python实现
class Solution:
def poweroftwo(self , n: int) -> bool:
return n>0 and n&(n-1)==0
c++实现
简单易懂版本
class Solution {
public:
bool poweroftwo(int n) {
if(n == 0) return false;
if(n&(n-1)){
return false;
}else{
return true;
}
}
};
简洁版
class Solution {
public:
bool poweroftwo(int n) {
int num = n&(n-1);
return n>0 && num==0;
}
};