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

总结

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值