Bootstrap

LeetCode:231(Python)—— 2 的幂(简单)

2 的幂

概述:给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。如果存在一个整数 x 使得 n == 2x ,则认为 n 2 的幂次方。

输入:n = 1
输出:true

输入:n = 16
输出:true

输入:n = 3
输出:false

方法一:二进制(巧妙)

思路:此算法是一种非常讨巧的解法,二进制数只有最高位为

# 二进制(巧妙)
# 此算法是一种非常讨巧的解法,二进制数只有最高位为 1。
class Solution:
    def isPowerOfTwo(self, n: int) -> bool:
        return n > 0 and bin(n).count('1') == 1

方法二:二进制

思路:用位运算把二进制中最低位的 1 提出来,然后判断即可。

# 二进制
# 用位运算把二进制中最低位的 1 提出来,然后判断即可。
class Solution:
    def isPowerOfTwo(self, n: int) -> bool:
        return n > 0 and (n & (n - 1)) == 0

方法三:约数

思路:设定一个上限值,然后判断是否被约分即可。

# 约数
# 设定一个上限值,然后判断是否被约分即可。
class Solution:
    def isPowerOfTwo(self, n: int) -> bool:
        return n > 0 and 2 ** 30 % n == 0

方法四:log方法

思路:调用 math.log2() 方法对 n 进行判断即可。 

# log方法
# 调用 math.log2() 方法对 n 进行判断即可。 
class Solution:
    def isPowerOfTwo(self, n: int) -> bool:
        return n > 0 and math.log2(n) == int(math.log2(n))

方法五:递归

思路:设定好边界条件,然后依次递归到最小值,判断即可。

# 递归
# 设定好边界条件,然后依次递归到最小值,判断即可。
class Solution:
    def isPowerOfTwo(self, n: int) -> bool:
        if n < 1:
            return False
        while n != 1:
            if n % 2 == 1:
                return False
            n /= 2
        return True

总结

别跟我说什么技巧,直接递归就完事了!

;