python - 相同的代码,但一个超过了输出的时间限制,另一个工作得很好
问题描述
第一个代码是我写的,但是在执行它时,我超过了时间限制。
class Solution:
def isHappy(self, n: int) -> bool:
l=set()
while(n not in l):
l.add(n)
x=0
while n:
s=str(n)
for i in s:
x+=(int(i)*int(i))
n=x
if(n==1):
return True
return False
这是第二个代码,在执行时,它运行得非常好。
class Solution:
def isHappy(self, n: int) -> bool:
visit = set()
while n not in visit:
visit.add(n)
n = sumofSquares(n)
if n == 1:
return True
return False
def sumofSquares(n):
output = 0
while n:
for i in str(n):
output += int(i) * int(i)
return output
所以你们能告诉我这两个代码的时间复杂度之间的区别以及为什么会发生这种情况吗?
解决方案
您正在编写的代码执行无限循环,请尝试(手动)运行您的代码和 n=1 的第二个代码
这是一个工作代码:
def isHappy(n: int) -> bool:
visit = set()
while n not in visit:
visit.add(n)
square_sum = 0
for i in str(n):
square_sum += int(i)**2
n = square_sum
if n == 1:
return True
return False
for i in range(20):
print(i, isHappy(i))
# prints 'True' for:
# 1, 7, 10, 13, 19
推荐阅读
- python - 如何对堆积数据(python)上的趋势进行分类?
- flutter - 当 InteractiveViewer 放大时,可拖动的反馈小部件获得偏移
- android - Android显示通话屏幕(使用fullScreenIntent)无抬头状态
- reactjs - ReactNative queryString 格式不正确
- python - 使用 numpy.roll 独立滚动矩阵的行
- azure-ad-b2c - 在 azure b2c 中阻止来自国家/地区的访问
- javascript - 如何使用javascript修复类型never []的错误属性不存在?
- arrays - 如何在 VBA 中修剪数组中的值?
- flutter - 视频小部件不播放“无法在频道上建立连接”
- ios - iPhone 设备的 UUID