如何从leetcode中理解快乐的数字

时间:2015-06-07 19:24:55

标签: python

以下是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 enter image description here 由于89在集合中再次重复,输出False。 对不起我的罗嗦描述。简单来说,我的问题是这个错误是怎么出来的?在编码中,没有地方显式返回False

3 个答案:

答案 0 :(得分:0)

您发布的 isHappy 功能是正确的。

这是它的工作原理 -

  1. 它将计算数字的平方并将其保存在n。
  2. 如果n为1则停止。否则,它将n附加到更改列表和循环。但是,只要n是更改列表中的任何数字,循环就会中断。
  3. 在Python中,当控件来自循环时,它将最后的值存储在变量中。因此,n存储了最后一次计算。
  4. 现在,如果n为1,则n == 1将返回True,否则为False。
  5. 希望有所帮助。

答案 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