其他分享
首页 > 其他分享> > leetcode--231. 2的幂

leetcode--231. 2的幂

作者:互联网

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

示例 1:

输入: 1
输出: true
解释: 20 = 1

示例 2:

输入: 16
输出: true
解释: 24 = 16

示例 3:

输入: 218
输出: false

第一种思路:直接循环查找

class Solution {
public:
    bool isPowerOfTwo(int n) {
        int flag = 0;
        for(int i = 0;i <= 32;++i)
        {
            if(pow(2,i) == n)
                flag = 1;
        }
        if(flag)
            return true;
        else
            return false;
    }
};

第二种思路:此题判断该数字二进制中一的个数,如果非负,其中一的位数只有一位就一定是2的幂,否则就为2的幂,所以可以采取一位一位的判断比较,但是这样就更慢,所以可以采取其他办法,即n&(n-1)一定可以消去右边第一个出现的1,大家可以这样理解,不管对于n中最后一个一的位置如何比如为....1000...(N个)假设1的后面有N个0,对于该数字减一而言就变成了....01111....(N个)后面的0全部就因为借位变成了1,此时将两个数字相与就会把最后一个1之后(包括1)全部变成了0.所以我们消去一个1之后如果还有1 那么这个数一定不为0,所以只需要进行与运算之后判断是否为0即可

class Solution {
public:
    bool isPowerOfTwo(int n) {
        if(n<=0) return false;
        return (n&(n-1))==0;
    }
};

 

标签:示例,int,....,231,public,isPowerOfTwo,true,leetcode
来源: https://blog.csdn.net/qq_40511966/article/details/99948189