以下是leetcode的问题: 编写一个算法来确定一个数字是否“快乐”#34; 幸福数字是由以下过程定义的数字:从任何正整数开始,将数字替换为其数字的平方和,并重复该过程,直到数字等于1(它将保留),或者循环在一个不包括1的循环中无休止地。这个过程以1结尾的那些数字是幸福的数字。
Example: 19 is a happy number
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
问题1:根据我的理解,如果1发生,则返回True否则它将无限地运行我从这句话中理解的循环"或者它在一个不包括1的循环中无休止地循环。" 然而,在我从互联网上找到这个问题的答案之后,我发现我的理解是错误的。如果1发生则应该返回True,**如果在集合中重复任何数字,则结束循环并返回False。 **嗯,老实说,这个问题说的是,或者它在一个不包括1的循环中无休止地循环。"为什么我们只是让程序在一个循环中无休止地运行,因为它表明了?
问题2:对于第二个问题,我认为这是关于理解代码。这是我从internet找到的:
def isHappy(n):
stop = {1}
while n not in stop:
stop.add(n)
n = sum(int(d)**2 for d in str(n))
return n == 1
从这些代码中,我可以理解,如果1发生,它将停止运行while循环并返回True。但是,如果在集合中发生重复数字,我认为它也将停止运行while循环并返回True,因为下一行后跟while语句仍然返回n == 1.但是,实际上它会输出False.eg 由于89在集合中再次重复,输出False。 对不起我的罗嗦描述。简单来说,我的问题是这个错误是怎么出来的?在编码中,没有地方显式返回False
答案 0 :(得分:0)
您发布的 isHappy 功能是正确的。
这是它的工作原理 -
希望有所帮助。
答案 1 :(得分:0)
这是我的做法,即使有点混乱
#Python program to check if a number is a happy number
#Creating an user defined function which returns True if the number is happy else False
def happy(num) :
#Creating a copy of the number in a string and a iterating point
copy = str(num)
square = num
#Proceeding with while loop due to unknown iterations
while True : #inifinte loop
square = sum(int(j) ** 2 for j in list(str(square))) #Sum of the number's digit squares
if square == 1:
test = True
break
elif square == 4:
test = False
break
return test
check = int(input('Enter the number: '))
print('The number {} {} a happy number'.format(check, ('is') if happy(check) == True else ('is not')))
答案 2 :(得分:-1)
是一个流行的解决幸福数字问题的方法。这个键是过去没有出现的每个数字的平方和,否则,会有一个无限循环。
class Solution:
# @param {integer} n
# @return {boolean}
def isHappy(self, n):
s=set()
while n!=1 and n not in s:
s.add(n)
n= sum([int(x)**2 for x in str(n)])
return n==1