2015年10月7日星期三

#LeetCode# Add Digits

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 = 111 + 1 = 2. Since 2 has only one digit, return it.
Follow up:
Could you do it without any loop/recursion in O(1) runtime?

对给定的数逐位求和,直至得到的结果是个位数。以前处理过逐位求和,无非是sum=sum+num%10, num=num/10。

这里我们加上判断结果是否为个位数的判定条件,然后递归调用即可。

上代码,

public class Solution {
    public int addDigits(int num) {
        num = sum(num);
        while(num > 9) {
            num = sum(num);
        }
        return num;
    }
    
    private int sum(int num) {
        int sum = 0;
        while (num >0) {
        sum = sum + num % 10;
        num = num/10;
        }
        return sum;
    }
}

此方法的时间复杂度是多少呢?

如何用O(1)求解,这是个问题。

没有评论:

发表评论