首页 > 解决方案 > 相同的代码,但一个超过了输出的时间限制,另一个工作得很好

问题描述

第一个代码是我写的,但是在执行它时,我超过了时间限制。

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

所以你们能告诉我这两个代码的时间复杂度之间的区别以及为什么会发生这种情况吗?

标签: python

解决方案


您正在编写的代码执行无限循环,请尝试(手动)运行您的代码和 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

推荐阅读