原题
给出一个非负整数,重复计算为一位的和,直到这个和变为一位数
样例:
给出 num = 38,过程即:
3 + 8 = 11
1 + 1 = 2
因为2只有一位,所以返回2
解题思路
- 方法一:安装题目要求进行计算即可
- 方法二:同样是写出一些相应的结果,找规律
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个一次循环,但需要注意:9, 18...对9取余就是0了,为了得到其本身,我们就用(n-1)%9+1这个表达式来包括所有的情况
完整代码
# method 1
class Solution(object):
def addDigits(self, num):
"""
:type num: int
:rtype: int
"""
res = self.helper(num)
while res > 9:
res = self.helper(res)
return res
def helper(self, num):
sum = 0
while num != 0:
sum += num % 10
num = num / 10
return sum
# method 2
class Solution(object):
def addDigits(self, num):
"""
:type num: int
:rtype: int
"""
if num == 0:
return num
return (num - 1) % 9 + 1