#202. 开心数 – 快乐想象不到
题目
给定一个数,判定该数是否是开心数。
- 开心数的定义:给定n,一遍遍把n更新为它每个数字的平方和。
- 如果n最终到1,则该数为开心数;如果n最终循环了,则该数不是开心数。
解答
循环代表n在更新过程中重复了之前的值。
当 n != 1 :
- 储存 n 进 set values,用于记录出现过的 n
- 求取 n 为它每个数字的平方和,存为temp – n 将要被更新成的值。
- 如果在哪一刻temp的数出现在values里面,则遇到循环,return False。
- 如果没有,放心的把 n 更新为temp。
在循环外边,return True
class Solution:
def isHappy(self, n: int) -> bool:
values = set()
while n != 1:
values.add(n)
#拆解n并更新n
temp = 0
#数字的平方和
while n != 0:
digit = n % 10
temp += digit * digit
n = n // 10
if temp in values:
return False
n = temp
return True
收获
- !!!在这里,解题的关键是循环。导致循环只有一种可能,n 在经过不断更新后,在某一刻被更新为了之前出现过的相同的数,这样 n 永远不会停止更新。
- 记住用x in set去看是否set中含有某元素。
- 取一个数的所有位置的数字,记得 % 10 得到个位,//10得到下一个可提取个位的数 (类似于小数点往前移动一位)