[LeetCode-CN]231. 2的幂(easy)

231. 2的幂(easy)

题目

给定一个整数,编写一个函数来判断它是否是 2 的幂次方。

示例 1:

输入: 1
输出: true
解释: 20 = 1
示例 2:

输入: 16
输出: true
解释: 24 = 16
示例 3:

输入: 218
输出: false

思路

方法一 4ms

我们来观察下2的次方数的二进制写法的特点

1    2     4      8       16   ....

1    10    100    1000    10000 ....

那么我们很容易看出来2的次方数都只有一个1,剩下的都是0,所以我们的解题思路就有了,我们只要每次判断最低位是否为1,然后向右移位,最后统计1的个数即可判断是否是2的次方数。

方法二 4ms

这道题还有一个技巧,如果一个数是2的次方数的话,根据上面分析,那么它的二进数必然是最高位为1,其它都为0,那么如果此时我们减1的话,则最高位会降一位,其余为0的位现在都为变为1,那么我们把两数相与,就会得到0,用这个性质也能来解题,而且只需一行代码就可以搞定。

代码

class Solution {
public:
    //4ms
    bool isPowerOfTwo1(int n) {
        int cnt=0;
        while(n>0){
            cnt+= (n&1);
            n>>=1;
        }
        return cnt==1;
    }
    //4ms
    bool isPowerOfTwo(int n) {
        return (n>0) && (!(n &(n-1)));
    }
};

你可能感兴趣的:(LeetCode-CN)