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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值