题目描述
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为:
- 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
- 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
- 如果这个过程 结果为 1,那么这个数就是快乐数。
- 如果 n 是 快乐数 就返回 true ;不是,则返回 false 。
示例 1:
输入:n = 19
输出:true
解释:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2+ 0^2 = 1
示例 2:
输入:n = 2
输出:false
解题思路
每次除以10的余数存进列表,最后循环列表,将每一位数字平方后相加,作为新的n。循环边界条件为n>6,这是因为当n只有一位数时,可以直接判断是否为快乐数。而经过计算可得,n等于2、3、4、5、6时无法经过算法得到结果1。此方法的时间复杂度为O(log(n))
代码实现
def isHappy(self, n: int) -> bool:
while n>6:
s = n
my_list = []
res = 0
while s>9:
m = s%10
s //= 10
my_list.append(m)
if s < 10:
my_list.append(s)
for num in my_list:
res += (num**2)
n = res
if n==1:
return True
else:
return False