LeetCode 258. Add Digits
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?
題目標簽:Math
如果要滿足O(1) 的要求,這裏需要用到digital root 公式。
首先來看一下規律:
1 - 1
2 - 2
3 - 3
4 - 4
5 - 5
6 - 6
7 - 7
8 - 8
9 - 9 *
10 - 1
11 - 2
12 - 3
13 - 4
14 - 5
15 - 6
16 - 7
17 - 8
18 - 9 *
19 - 1
20 - 2
...
我們可以發現 digital root 永遠是 1 到 9 循環,所以我們可以利用 % 9。
Step 1: 如果num 是0,那麽返回 0;
Step 2: 如果num 可以被 9 整除,那麽返回 9;
Step 3: 剩下的情況,只要返回 num % 9。
Java Solution:
Runtime beats 26.24%
完成日期:06/16/2017
關鍵詞:Digital root
關鍵點:digital root 從1 到 9 循環 -> 利用 % 9 得到 digital root
1 class Solution 2 { 3 public int addDigits(int num) 4 {5 if(num == 0) 6 return 0; 7 8 if(num % 9 == 0) 9 return 9; 10 11 return num % 9; 12 } 13 }
參考資料:http://www.cnblogs.com/grandyang/p/4741028.html
LeetCode 題目列表 - LeetCode Questions List
題目來源:https://leetcode.com/
LeetCode 258. Add Digits