Leetcode 1780. Check if Number is a Sum of Powers of Three [Python]

Leetcode 1780. Check if Number is a Sum of Powers of Three [Python],第1张

Leetcode 1780. Check if Number is a Sum of Powers of Three [Python]

基本思路还是暴力:处理小于3的时候是不是1,0 2 都得不到。然后设置一个求解的函数,记录上次的power是多少,每次start(新的power)从1开始遍历,逐渐+1,直到3start 大于n的时候,start-1,得到最接近n的值,此时如果start和上次的power一样,则违反题目要求,返回false;不然则可以往下继续,然后n-3start,更新n的值,如果n >= 3.那继续往下迭代,此时的power数是start,所以要更新power的上限,也就是limit为start。当前n<3 后,不是0 或者1,也就是全部减完,或者留下30,则返回False,反之则是True。由于每次的n都是在减少,相应的最大的使得3power 小于等于n的power也会逐步变小。

class Solution:
    def checkPowersOfThree(self, n: int) -> bool:
        if n == 0 or (n < 3 and n != 1):return False
        return self.find(n, float('inf'))
        
    def find(self, n, limit):
        power = 1
        while 3**power <= n:
            power += 1
        power -= 1
        if power == limit:return False
        n -= 3**power
        if n == 1 or n == 0:return True
        if n == 2:return False
        if n >= 3:return self.find(n, power)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5721082.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存