(leetcode)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?

 1 class Solution {
 2 public:
 3     int addDigits(int num) {
 4         int ans = num;
 5         // while(ans!=2)
 6         // {
 7         while(1)
 8         {
 9             if(ans < 10) return ans;
10             num = ans;
11             ans = 0;
12             while(num != 0)
13             {
14                 ans += num%10;
15                 num /= 10;
16             }
17         }
18     }
19 };

 

O(1)方法

观察如下输入:

输入: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

posted @ 2015-08-24 10:03  sunalive  Views(197)  Comments(0)    收藏  举报