[英]Time Limit exceeded in python solution
我试图解决 Leetcode 问题Happy Number ,但我似乎陷入了一个奇怪的 Time Limit Exceeded Error 错误。
我的代码:
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
知道如何克服这个吗?
尝试直到出现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
这个想法是展示一个没有蛮力的解决方案。 也许可以有更好的解决方案,例如,如果那些快乐的数字有一些特殊的数学属性等......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.