欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Leetcode1780.CheckifNumberisaSumofPowersofThree[Python]

时间:2023-08-22

基本思路还是暴力:处理小于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)

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。