258. Add Digits

本题大意:给定一个非负的整数,重复地将它的各个位数相加直到结果只有一位数字。

例如:num = 38,过程应该是:3 + 8 = 11, 1 + 1 = 2,因为2只有一位数字,就可以返回了。

有没有可能得到o(1)复杂度的算法?

第一种方法:循环。代码如下:

 1 int addDigits(int num) {
 2         while(num>=10){
 3             num = retDigit(num);
 4         }
 5         return num;
 6     }
 7     int retDigit(int num){
 8         int sum = 0;
 9         int tmp1 = num;
10         int tmp2 = 0;
11         while(tmp1>=1){
12             tmp2 = tmp1 % 10;
13             sum += tmp2;
14             tmp1 = tmp1 / 10;
15         }
16         return sum;
17     }

第二种方法:找规律。代码如下:

1 int addDigits(int num) {
2     return num == 0 ? 0 : (num-1)%9 + 1;
3 }
原文地址:https://www.cnblogs.com/jingyuewutong/p/5600652.html