class Solution:
def isHappy(self, n):
"""
:type n: int
:rtype: bool
"""
# 考虑递归的终止条件,不能收敛为 1 的数字怎么办?
# 不能收敛为1 的数字一般都是循环结构,寻找数学规律
# method one 字符串与整数的转换
# if n < 10:
# if n == 1 or n == 7:
# return True
# else:
# return False
# return self.isHappy(sum([int(i)**2 for i in str(n)]))
# method two 地板除与取余
if n < 10:
if n == 1 or n == 7:
return True
else:
return False
new_n = 0
while n:
new_n += (n % 10)**2
n //= 10
return self.isHappy(new_n)
# Approach Three 没有发现1,7数学规律的解法
tt = {}
while n != 1:
if tt.get(n,0) == 1:
return False
else:
tt[n] = 1
n = sum([int(i)**2 for i in str(str(n))])
return True