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 = 111 + 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/

posted @ 2018-01-31 08:40  Jimmy_Cheng  阅读(102)  评论(0编辑  收藏  举报