【LeetCode 简单题】76-3的幂

声明:

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

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

正文

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

示例 1:

输入: 27
输出: true

示例 2:

输入: 0
输出: false

示例 3:

输入: 9
输出: true

示例 4:

输入: 45
输出: false

进阶:
你能不使用循环或者递归来完成本题吗?

解法1。输入是int,最大是2^31\approx3^19,如果输入是3的幂,必然满足大于0且能被3^19整除,代码如下。

执行用时: 184 ms, 在Power of Three的Python提交中击败了52.39% 的用户

import math
class Solution(object):
    def isPowerOfThree(self, n):
        """
        :type n: int
        :rtype: bool
        """
        return n > 0 and math.pow(3,19) % n == 0

解法2。细化一下还是用循环做做,对3的幂的性质有更进一步的了解,首先能整除3,代码如下。

执行用时: 180 ms, 在Power of Three的Python提交中击败了58.93% 的用户

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

 解法3。用递归试试,顺便熟悉一下的套路。思路非常的清晰,基线条件从0-3都列举出来了,代码如下。

执行用时: 176 ms, 在Power of Three的Python提交中击败了66.33% 的用户

class Solution(object):
    def isPowerOfThree(self,n):
        if n == 0:
            return False
        if n == 1:
            return True
        if n == 2:
            return False
        if n == 3:
            return True
        if n%3 == 0 and n > 3:
            return self.isPowerOfThree(n/3)     # 注意这里一定要return
        else:
            return False

结尾

解法1:https://blog.csdn.net/qq_34364995/article/category/7655706

解法2&解法3:LeetCode

猜你喜欢

转载自blog.csdn.net/weixin_41011942/article/details/83817634