应用题-哈希表-快乐数
补充:
数学上已经证明:各位平方和的结果只会落在有限范围内,最终要么到 1,要么进入循环。
```
证明思路
一个 3 位数最大是 999,各位平方和 = 243
一个 4 位数最大是 9999,各位平方和 = 324
随着位数增加,平方和增长远慢于数字本身
所以数字会迅速缩小到 3 位数以内
在 1-243 这个有限范围内,必然会出现重复或到达 1
```
```python
class Solution:
# 快乐数:
# 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
# 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
# 如果这个过程 结果为 1,那么这个数就是快乐数。
def isHappy(self, n: int) -> bool:
repeat = set() # 如果数字已经出现过 再进行下去也只是无限循环
while n != 1:
repeat.add( n )
x = 0
# 拆分每一位
while n != 0:
x += ( n % 10 ) * ( n % 10 )
n //= 10
n = x
if n in repeat: return False
return True
```