方法一:判断模

核心思路:判断 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;
    }
};