原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-medium/xw99u7/
解法一:
class Solution:
def isHappy(self, n: int) -> bool:
if n==1:
return True
dic = {n:1}
while n != 1:
str_n = str(n)
sumVal = 0
for s in str_n:
sumVal = sumVal + int(s) ** 2
if sumVal not in dic:
dic[sumVal] = 1
else:
return False
if sumVal == 1:
return True
n = sumVal
思路:
如果 n
为1,则返回True,因为当输入为1时,它本身就是一个快乐数(Happy Number)。
建立一个字典dic
,初始情况下将n作为键,值为1。字典dic
用于存储之前得到的平方和,如果之后再次出现,则说明已经陷入了循环,不再是一个快乐数。
进入while循环,当当前的数不为1时继续循环。将整数n转换成一个字符串str_n
。循环迭代每一位数字:将它的平方加到变量sumVal
上。
如果sumVal
不存在于dic
中,则将它添加到字典中。
如果sumVal
已经存在于字典中,则跳出循环并返回False。如果此时sumVal
为1,返回True。
如果在上述循环中,sumVal
经过多轮操作后,最终得到的结果是1,则该数是一个快乐数。否则,它不是一个快乐数。