题目
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。
 示例 1:
 输入: num = 38
 输出: 2
 解释: 各位相加的过程为:
 38 --> 3 + 8 --> 11
 11 --> 1 + 1 --> 2
 由于 2 是一位数,所以返回 2。
 示例 1:
 输入: num = 0
 输出: 0
 提示:
 0 <= num <= 2^31 - 1
 进阶:你可以不使用循环或者递归,在 O(1) 时间复杂度内解决这个问题吗?
 来源:力扣(LeetCode)
解题思路
模拟示例1的过程,每次都分解数字然后相加,然后再分解。
class Solution:
    def addDigits(self, num: int) -> int:
        if num%10==num:
            return num
        temp=0
        while num>0:
            temp+=num%10
            num//=10
        return self.addDigits(temp)
 

   考虑进阶意见;先写上一些找找规律:
 0->0
 1->1
 2->2
 3->3
 .
 .
 .9->9
 10->1
 11->2
 12->3
 13->4
 .
 .
 .
 19->8
 这其实有点像9进制数,但是它不是映射到0->8,而是1->9,对9取余便是结果,当然这里面有一些特殊的情况,比如0和倍数于9的数。
class Solution:
    def addDigits(self, num: int) -> int:
        if num==0:
            return 0
        return num%9 if num%9!=0 else 9
 











