在python解决方案中超过了时间限制

2024-06-26 12:33:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图解决Leetcode问题Happy Number,我似乎陷入了一个奇怪的超过时间限制的错误

我的代码:

class Solution:
    def isHappy(self, n: int) -> bool:
        def simu(n):
            sums = 0
            while n>0:
                s = n%10
                n = n//10
                sums=sums+(s**2)
            if sums != 1:
                simu(sums)
            return True
        while True:
            try:
                return simu(n)
            except RecursionError:
                return False

你知道怎么克服吗


Tags: 代码truenumberreturndef错误时间class
1条回答
网友
1楼 · 发布于 2024-06-26 12:33:23

尝试直到你得到一个RecursionError是一个非常糟糕的主意。相反,我能想到的一个解决办法是,跟踪以前失败的号码,一旦你得到一个已经失败的号码,就停止进一步的尝试。因为,你肯定知道同样的事情还会发生

class Solution:
    def transform(self, n: int) -> int:
        s = 0
        while n > 0:
            d = n % 10
            s += d * d
            n = n // 10
        return s

    def isHappy(self, n: int) -> bool:
        failed_hist = set()  # maybe you can preload this with some already known not-happy numbers
        while n not in failed_hist:  # continue as long as `n` has not failed before
            if n == 1:
                return True
            failed_hist.add(n)  # remember this failed !
            n = self.transform(n)  # transform `n` to it's next form
        return False  # loop broke, i.e. a failed `n` occured again

这个想法是要证明一个解决方案,而不是暴力强迫。也许有更好的解决办法,例如,如果这些快乐的数字有一些特殊的数学性质等

相关问题 更多 >