文章目录
- 1、题目描述
- 2、思路1
- 代码
1、题目描述
快乐数。
编写一个算法来判断一个数 n 是不是快乐数。
快乐数定义为:对于一个正整数,每次不断将其转化成 每位数字的平方和。 判断是否最终和会为1,是1就是快乐数,否则不是。
2、思路1
这里我参考官方题解,讲解的很明白。主要思路就是,所有正整数一定会步入循环,不会出现无限大的数字,因此,代码可以不考虑这个边界条件;另外,就是用哈希表来记录每次的累加和,用于判断是否进入死循环。
代码
class Solution:
def isHappy(self, n: int) -> bool:
# func: 计算当前数字的平方和
def get_number(num):
num = str(num)
sum = 0
for char in num:
sum += int(char)**2 # 这里用**,别用^ !!!
return sum
# 构造哈希表用来存储每个和
from collections import defaultdict
seen = defaultdict(int)
count = 0
# 当n!=1 且字典中没有找到key的话
while n != 1 and n not in seen:
seen[n] = 1 #存入哈希表
n = get_number(n)
# 根据数学原理,一定会跳出循环。
return True if n == 1 else False