LeetCode算法题231:2的幂解析

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

输入: 1
输出: true
解释: 2^0 = 1

示例2:

输入: 16
输出: true
解释: 2^4 = 16

示例3:

输入: 218
输出: false

这个题首先可以按定义解,循环计算n对2的余数,一旦不为零就不是2的幂,然后用n整除2再进行计算判断。直到最后n等于1时说明是2的幂。
C++源代码:

class Solution {
public:
    bool isPowerOfTwo(int n) {
        if (n==0)
            return false;
        while (n!=1)
        {
            if (n%2 != 0)
                return false;
            n = n / 2;
        }
        return true;
    }
};

还有一种新颖的解法就是如果是2的次幂,那么用二进制数表示必然只有1位为1。然后这个数减1之后就会除那一位外都为1。所以可以用n和n-1相与,结果是0,那么就是2的幂,不为0就不是。
python3源代码:

class Solution:
    def isPowerOfTwo(self, n):
        """
        :type n: int
        :rtype: bool
        """
        if n == 0:
            return False
        if (n & (n-1)) == 0:
            return True
        else:
            return False

猜你喜欢

转载自blog.csdn.net/x603560617/article/details/84073293