2015-06-07 47 views
0

以下是來自代碼的問題: 編寫一個算法來確定一個數字是否「開心」。 快樂數字是由以下過程定義的數字:從任何正整數開始,將數字替換爲其數字平方和,然後重複該過程直到數字等於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:對於第二個問題,我認爲這是關於理解的codes.This是我從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,因爲下一行後面的語句仍然返回n == 1.但是,實際上它會輸出False.eg enter image description here 因爲89在該集合中再次重複輸出False。 對不起,我的羅嗦說明。簡單地說,我的問題是這個錯誤如何出現?在編碼,也沒有明確的地方返回False

+1

'n == 1'的計算結果是什麼? – Hurkyl

+0

我看到了!! @ Hurkyl n if = 1然後返回true否則返回false!非常感謝! – user12551

回答

0

您發佈的isHappy功能是正確的。

這是它的工作原理 -

  1. 它將計算的數字的平方,並將其保存在正。
  2. 如果n是1,則停止。否則,它附加n來改變列表和循環。但只要n是更改列表中的任何數字,循環就會中斷。
  3. 在Python中,當控制流出循環時,它將最後的值存儲在變量中。所以,n有最後的計算存儲。
  4. 現在,如果n爲1,n == 1返回True否則爲False。

希望有所幫助。

+0

你爲什麼需要*用'list'替換'set'? – Hurkyl

+0

列表如何比存儲非重複數字的集合更好? – folkol

+0

哎呀抱歉,我很困,並把它當作詞典。現在修復。 –

-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