力扣(LeetCode)258. 各位相加

给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。

示例:

输入: 38
输出: 2
解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。
进阶:
你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?

java 暴力 版

class Solution {
    public int addDigits(int num) {
        if(num==0) {
            return 0;
        }
        while((int)Math.log10(num) != 0 ) {
            int sum=0;
            while(num!=0) {
               sum += num%10;
               num /= 10;
            }
            num=sum;
        }
        return num;
    }
}

java 进阶 版

有规律 加和成一位数,肯定是1~9,能被9整除,返回9;不能被9整除,返回余数

class Solution {
    public int addDigits(int num) {
        if(num>9) {
            if(num%9==0) {
                return 9;
            }else {
                return num%9;
            }
        }else {
            return num;
        }
    }
}

运行结果

posted @ 2019-04-08 17:15  lick  阅读(311)  评论(0编辑  收藏  举报