力扣练习之快乐数

我爱海鲸 2023-05-16 21:52:06 力扣、中级算法

简介中级算法、数学

原题出处: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,则该数是一个快乐数。否则,它不是一个快乐数。

你好:我的2025