对于Happy Number Question from Leet code的一种解决方案,我在理解空间复杂度分析时遇到一些困难,由于对复杂度分析有疑问,我用粗体标记并非常感谢您的建议>
这是问题:
链接:https://leetcode.com/problems/happy-number/
问题:
编写一种算法来确定数字是否“幸福”。一个快乐的数字 是由以下过程定义的数字:以任何数字开头 正整数,用数字的平方和代替数字 位数,然后重复该过程,直到数字等于1( 将会停留),否则它会在不包含1的循环中无限循环。 那些以1结尾的数字是快乐数字。
示例:
输入:19
输出:true
说明:
1 ^ 2(1的平方)+ 9 ^ 2 = 82
8 ^ 2 + 2 ^ 2 = 68
6 ^ 2 + 8 ^ 2 = 100
1 ^ 2 + 0 ^ 2 + 0 ^ 2 = 1
代码如下:
class Solution(object):
def isHappy(self, n):
#getnext function will compute the sum of square of each digit of n
def getnext(n):
totalsum = 0
while n>0:
n,v = divmod(n,10)
totalsum+=v**2
return totalsum
#we declare seen as a set to track the number we already visited
seen = set()
#we stop checking if: either the number reaches one or the number was visited #already(ex.a cycle)
while n!=1 and (n not in seen):
seen.add(n)
n = getnext(n)
return n==1
注意:如果需要解释代码的工作原理,请随时告诉我
解决方案说空间复杂度是logN,有人可以给我一些建议的原因吗?