📅  最后修改于: 2023-12-03 15:37:15.801000             🧑  作者: Mango
这是一个来自国际空间研究组织(ISRO)编程竞赛2017年5月份的第6道问题。本题需要编写一个函数,判断一个给定的数字是否为happy number。
首先,让我们了解一下什么是happy number。
一个数是happy number,当且仅当对于这个数的每一位数的平方和,将其数字拆分并取平方和,一直递归下去直到最后结果为1。
例如,19是一个happy number:
因此,19是一个happy number。
编写一个Python函数is_happy_number()
,该函数接收一个整数num
作为输入,并返回一个bool值,表示num
是否为happy number。
函数签名为:
def is_happy_number(num: int) -> bool:
示例1:
assert is_happy_number(19) == True
示例2:
assert is_happy_number(7) == True
示例3:
assert is_happy_number(18) == False
为了判断一个数字是否为happy number,我们需要进行如下操作:
然后,我们就有了下面这个函数:
def is_happy_number(num: int) -> bool:
if num == 1:
return True
seen_nums = set()
while num not in seen_nums:
seen_nums.add(num)
num = sum(int(i)**2 for i in str(num))
if num == 1:
return True
return False
函数首先判断特殊情况,如果输入数字是1,那么该数字一定是happy number,直接返回True。否则,我们创建一个set来存储已经出现过的数字。然后,我们将当前数字添加到set中,并对当前数字进行计算平方和运算。如果得到的结果为1,说明当前数字是happy number,直接返回True。否则,将计算出来的新数字设置为当前数字,继续执行循环。如果在循环的过程中发现当前数字已经出现过,那么可以退出循环,该数字不是happy number,返回False。
此函数可以通过本题的所有测试用例。