编写一个算法来判断一个数 n
是不是快乐数。
「快乐数」 定义为:
- 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
- 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
- 如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n
是 快乐数 就返回 true
;不是,则返回 false
。
class Solution:
def isHappy(self, n: int) -> bool:
def getSum(n):
summary = 0
while n:
summary += (n % 10) * (n % 10)
# n /= 10 # ❗ 错误
# 在Python中/表示浮点整除法,返回浮点结果,也就是结果为浮点数;
# 而//在Python中表示整数除法,返回大于结果的一个最大的整数,意思就是除法结果向下取整。
# 举例
# print("6 // 4 = " + str(6 // 4))
# print("6 / 4 =" + str(6 / 4))
# 结果:
# 6 // 4 = 1
# 6 / 4 =1.5
n = n // 10
return summary
hash_dict = {}
summary = n
while 1:
summary = getSum(summary)
if summary == 1:
return True
if summary in hash_dict.keys():
return False
else:
hash_dict[summary] = 1
用set()更直观:
class Solution:
def isHappy(self, n: int) -> bool:
def calculate_happy(num):
sum_ = 0
# 从个位开始依次取,平方求和
while num:
sum_ += (num % 10) ** 2
num = num // 10
return sum_
# 记录中间结果
record = set()
while True:
n = calculate_happy(n)
if n == 1:
return True
# 如果中间结果重复出现,说明陷入死循环了,该数不是快乐数
if n in record:
return False
else:
record.add(n)