2016-02-04 19 views
1

我正在研究一個leetcode: 給定一個非負整數num,重複添加其所有數字,直到結果只有一個數字。Leetcode數字根目錄

例如:

鑑於NUM = 38,則處理是這樣的:3 + 8 = 11,1 + 1 = 2。由於2僅具有一個數字,返回它。

我的代碼如下,但是當輸入爲20時,它返回1.我不知道爲什麼盯着它20分鐘,任何人都可以幫忙?

非常感謝!

public class Solution { 
    public int addDigits(int num) { 
     if(num%10 == num){ //20%10 = 0//2%10 == 2 
      return num; 
     } 
     int sum = 0; 
     while(num%10 != num){ 
      sum += (num%10); //sum = 0 
      num /= num; //num =2 
     } 
     return addDigits(sum + num%10);// 0+2 

    } 
} 
+4

你有沒有通過調試器的單步執行代碼?如果不是,那就是開始的地方。如果你有,告訴我們你發現了什麼。 –

回答

1

num /= num;將始終等於1(即除非NUM = 0,你不想被零除 - 感謝約翰·布林) sum += (num%10);其中num=20意味着20 =20%10 = 0
添加這兩個結果,你會得到0+1 = 1。 1是一個單獨的數字號碼並被返回。

也許你的意思是:

while(num%10 != num){ 
     sum += (num%10); //sum = 0 
     num /= 10; //I CHANGED THIS LINE ONLY 
    } 
+1

唉,我希望OP會嘗試調試,並自己找到錯誤:-) –

+0

注意:'num%10'很貴,你可以用num <10'檢查一個數字是否是單個數字+1 –

+0

'num/= num'不會總是*等於1.如果'num'爲'0',那麼結果沒有被定義,並且計算會導致'ArithmeticException'被拋出。 –