题目
难度:★☆☆☆☆
类型:数学
编写一个算法来判断一个数是不是“快乐数”。
一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。
示例
输入: 19
输出: true
解释:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
解答
这道题很简单,根据定义进行编码即可,我们构建了求取各位平方和的子函数get_bit_square(n),会返回输入数字每一位的平方和,循环迭代地计算每一次输出的各位平方和,如果出现1,则输入数字是快乐数,此外,我们用一个临时列表sq记录已经出现过的各位平方和,查看每次计算出各位平方和是否在列表中出现过,若出现过,则之后的计算会循环下去,无法得到各位平方和为1的结果,不是快乐数。
class Solution(object):
def isHappy(self, n):
"""
:type n: int
:rtype: bool
"""
def get_bit_square(n):
"""
计算各位平方和
:param n:
:return:
"""
s = 0
while n:
r, n = n % 10, n // 10
s += pow(r, 2)
return s
sq = [] # 用于暂存每一步的各位平方和
while True: # 死循环
if n == 1: # 如果遇到各位平方和为1,则是快乐数
return True
n = get_bit_square(n) # 计算下一个各位平方和
if n in sq: # 如果计算结果在之前的记录中存在过
return False # 说明一定会继续循环下去,不是快乐数
sq.append(n) # 否则添加到临时列表中
如有疑问或建议,欢迎评论区留言~