Add Digits

来源:互联网 发布:c语言 external 编辑:程序博客网 时间:2024/06/05 16:11

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?

Brote force解法:用 loop;记住用另外一个变量记录中间temp sum的值。

public class Solution {    public int addDigits(int num) {        int temp = num;        while(temp/10!=0){            temp = 0;            while( num != 0){                int last = num % 10;                temp += last;                num = num/10;            }            num = temp;        }        return temp;    }}

题目要求用 constant time解法:找数学规律,

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

就是以9为循环的一个结构,这也是沁源老师说的,可视化,分析问题的时候可视化,就可以发现规律。

注意:0为特殊case要处理,然后%9 == 0的时候,其实就是9.

public class Solution {    public int addDigits(int num) {        if(num == 0) return 0;        if(num%9 == 0) {            return 9;        } else {            return num%9;        }    }}



0 0