[LintCode]各位相加

描述:

给出一个非负整数 num,反复的将所有位上的数字相加,直到得到一个一位的整数。

给出 num = 38。

相加的过程如下:3 + 8 = 111 + 1 = 2。因为 2 只剩下一个数字,所以返回 2

分析:

这道题并不难,只能说用好递归吧。

方法一:

public int addDigits(int num) {
        // write your code here
        if(num / 10 == 0){
            return num;
        }else{
            return addDigits(sum(num));
        }
    }
    
    public int sum(int num){
        if(num == 0){
            return 0;
        }else{
            return num % 10 + sum(num / 10);
        }
    }

方法二:

public int addDigits2(int num) {
        // write your code here
        String numStr = num + "";
        if (numStr.length() > 1) {
            int sum = 0;
            for (int i = 0; i < numStr.length(); i++) {
                sum += Integer.parseInt(numStr.charAt(i) + "");
                num = sum;
            }
            return addDigits2(num);
        }
        return num;
    }
原文地址:https://www.cnblogs.com/DarrenChan/p/8776791.html