首页 > 其他 > 详细

258. Add Digits

时间:2020-05-13 21:28:13      阅读:57      评论:0      收藏:0      [点我收藏+]

给定一个整数,求每个数位上的数字之和,若结果大于10,则继续相加,直到其结果小于10.
Input: 38
Output: 2
Explanation: The process is like: 3 + 8 = 11, 1 + 1 = 2.
  Since 2 has only one digit, return it.

思路:
一、递归,利用字符串辅助。

int addDigits(int num) {
    string s;
    s = to_string(num);
    int res = 0;
    for (auto a : s) res += a - 0;
    return res < 10 ? res : addDigits(res);
}

 


二、题目说能不能不用循环或递归,在 O(1)时间复杂度得出结果。
可以看到如下的范例:
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
……..
99 9
100 1
可以看到,以9为一个循环, x 非9的倍数时候,x%9就可以得到结果,但是x =9,18…这种的时候,x%9 = 0,单独判断即可。

int addDigits(int num) {
    if (num == 0) return 0;
    if (num % 9 == 0) return 9;
    return num % 9;
}

 

258. Add Digits

原文:https://www.cnblogs.com/luo-c/p/12884889.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!