Skip to content
Advertisement

Same code but one with time limit exceeded as output and another works perfectly fine

the first code is written by me, but while executing it, I am getting Time Limit Exceeded.

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

And here is the second code, while executing, this runs perfectly fine.

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

So guys can you all tell me the difference between the time complexity of these two codes and also why is this happening?

Advertisement

Answer

The code you’re writing does an infinite loop, try running (by hand) your code and the second code with n=1

Here is a working code:

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
User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement