1. 程式人生 > >LeetCode 258. Add Digits

LeetCode 258. Add Digits

gpo 返回 only follow ddd java roo 來源 beat

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