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 }