1.Description
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?
解读:按照O(1)的时间复杂度计算一个数字的各个位数的和,如果和超过两位数,继续求和,一直到为0
注:这样的问题很明显是找规律的,那就一个个开始试了
2.Solution
举个例子123456789
第1位:100000000%9=1
第2位:20000000%9=2
…
第8位:80%9=8
第9位:9%9=0(这里可以稍微变换一下)
等式两边相加:
num%9=sum(num[0]+…+num[8])
所以:
class Solution(object):
def addDigits(self, num):
"""
:type num: int
:rtype: int
"""
if num == 0:
return 0
else:
return ((num - 1) % 9 + 1)
或者简写成下面的形式
return num % 9 or 9 if num else 0