326. Power of Three [easy] (Python)

给定一个整数,该函数判断它是否是3的幂。提供了四种解题思路,包括使用循环、递归以及避免循环和递归的方法。讨论了在限制条件下如何检查输入数是否能被最大的3的幂次整除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接

https://leetcode.com/problems/power-of-three/

题目原文

Given an integer, write a function to determine if it is a power of three.

Follow up:
Could you do it without using any loop / recursion?

题目翻译

给定一个整数,判断它是否是3的倍数。
进一步:能否不用循环或递归实现?

思路方法

思路一

先不考虑进一步的要求,用循环的做法是:每次尝试将输入的数除以3,观察是否能整除,若不能则说明不是3的倍数;若能,则用除以3的结果循环上述过程,直至得到1,说明输入是3的幂次。

代码

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

思路二

先不考虑进一步的要求,用递归的做法也尝试一下。

代码

class Solution(object):
    def isPowerOfThree(self, n):
        """
        :type n: int
        :rtype: bool
        """
        if n <= 0:
            return False
        if n == 1:
            return True
        if n%3 == 0:
            return self.isPowerOfThree(n/3)
        else:
            return False

思路三

当然,题目说了不能循环或递归,上面的解法能AC但不太符合题意。考虑到输入是“Integer”,是有范围的(<2147483648),所以存在能输入的最大的3的幂次,即 3^19=1162261467。所以只要检查输入能否被它整除即可

代码

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

思路四

还可以算出能输入的所有3的幂次,保存到list或dict中,对每次输入判断是否在这些数中即可。

代码

class Solution(object):
    def isPowerOfThree(self, n):
        """
        :type n: int
        :rtype: bool
        """
        nums = [1, 3, 9, 27, 81, 243, 729, 2187, 6561, 19683, 59049, 177147, 531441, 1594323, 4782969, 14348907, 43046721, 129140163, 387420489, 1162261467]
        return n in nums

PS: 新手刷LeetCode,新手写博客,写错了或者写的不清楚还请帮忙指出,谢谢!
转载请注明:http://blog.csdn.net/coder_orz/article/details/51505792

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值