【LeetCode 简单题】61-2的幂

声明:

今天是第61道题。给定一个整数,编写一个函数来判断它是否是 2 的幂次方。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除

(手动比心ღ( ´・ᴗ・` ))

正文

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

示例 1:

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

示例 2:

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

示例 3:

输入: 218
输出: false

解法1。利用观察得出规律,如果n是2的若干次幂,那么n的2进制表示肯定是高位1其他全0,n和n-1的与肯定是全0。

执行用时: 28 ms, 在Power of Two的Python提交中击败了99.84% 的用户

class Solution(object):
    def isPowerOfTwo(self, n):
        """
        :type n: int
        :rtype: bool
        """
        if n == 0:
            return False
        if n == 1:
            return True
        res = n&(n-1)    # 如果n是2的若干次幂,n的二进制表示最高位为1其他全0,和n-1相与的话一定是全0
        if res == 0:
            return True
        else:
            return False

解法2。n除以2,遍历条件是n是2的倍数以及n>1,那么除到最后如果n是2的幂,那么肯定为1。

执行用时: 36 ms, 在Power of Two的Python提交中击败了39.53% 的用户

class Solution(object):
    def isPowerOfTwo(self, n):
        """
        :type n: int
        :rtype: bool
        """
        while n%2 ==0 and n>1:
            n /= 2
        return n=1
        

解法3。等比增加2的倍数和n相比较,如果恰好找到,返回True,若n更大,则等比增加,若n更小,那么返回False。

扫描二维码关注公众号,回复: 3925656 查看本文章

执行用时: 36 ms, 在Power of Two的Python提交中击败了39.53% 的用户

class Solution(object):
    def isPowerOfTwo(self, n):
        """
        :type n: int
        :rtype: bool
        """
        for i in range(32):
            if n == pow(2,i):   
                return True
            if n > pow(2,i):
                continue
            else:
                return False
        return False

结尾

解法1:https://blog.csdn.net/ymmbjcz/article/details/78645896

解法2&解法3:LeetCode

猜你喜欢

转载自blog.csdn.net/weixin_41011942/article/details/83501694
今日推荐