题目链接:https://leetcode.cn/problems/happy-number/description/

方法:哈希法-set()

  • 解题思路:

    • 拆解并拿到每个数字的平方,

    • 平方后相加得到的数字 再次进行拆解

    • 把每次相加得到的数字进行判断,如果如果出现过,就直接返回 False 证明不是快乐数,否则就添加到集合里面

    • 如果拆解不了(结束条件:数字为 1),就证明是快乐数

# [202] 快乐数
#

# @lc code=start
class Solution:
    def isHappy(self, n: int) -> bool:

        record = set()
        
        while True:
            n = self.get_sum(n)

            if n == 1:
                return True
            
            if n in record:
                return False
            else:
                record.add(n)
            


    def get_sum(self,n:int )->int:
        new_sum = 0
        while n:
            n,r = divmod(n,10)
            new_sum += r ** 2
        return new_sum

divmod(n, 10) 解析

总结:n 的变化过程

循环次数

n 初始值

divmod(n, 10) 结果

n 更新后

r(个位数)

new_num 计算

new_num 结果

第 1 次

19

(1, 9)

1

9

0 + 9² = 81

81

第 2 次

1

(0, 1)

0

1

81 + 1² = 82

82

第 3 次

0

循环终止

-

-

-

返回 82