[java] Add Digits 數字相加
阿新 • • 發佈:2019-01-04
Given a non-negative integer num
, repeatedly add all its digits until the
result has only one digit.
For example:
Given num = 38
, the process is like: 3
+ 8 = 11
, 1 + 1 = 2
. Since 2
has
only one digit, return it.
Follow up:
Could you do it without any loop/recursion in O(1) runtime?
簡要翻譯:
給定一個非零整數num,重複將各位上的數進行求和,知道結果只有一個數字位置。
例如,給定數字38,執行結果為 3+8 = 11, 1+1 = 2. 因為2只有一個數字,所以返回2.。
要求:在沒有迴圈和遞迴的幫助下,在O(1)的執行時間內完成計算。
簡要分析:
題目中要求,不使用迴圈和遞迴的前提下,解決這個問題。
根據已有的經驗,於是我寫出瞭如下的程式碼:
這個程式碼 AC了的。不過我仔細一下,不對啊!!!這裡我使用了遞迴啊。public static int addDigits(int num) { num = sumDigits(num); if (num < 10) return num; else return addDigits(num); } private static int sumDigits(int num) { if (num < 10) return num; else return sumDigits(num/10)+num%10; }
因此雖然AC了 ,但是實際上這是不對的。
還需另想辦法來解決這個問題。
那我們就試試幾個數,試著找一下規律。。。
輸入:1,2,3,4,5,6,7,8,9,10 11, 12, 13, 14, 15, 16, 17, 18, 19,20
結果:1, 2,3,4,5,6,7,8,9,1, 2, 3, 4, 5, 6, ,7, 8, 9, 1, 2根據上面的嘗試,我們可以發現,這裡是有規律的。
即結果滿足,(num-1)%9+1
因此有了如下程式碼:
public static int addDigits(int num) { return (num-1)%9+1; }
這個答案才是AC過的正確答案!!!