各位相加

来源:互联网 发布:mac os x 10.12黑苹果 编辑:程序博客网 时间:2024/04/29 04:47

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

样例

给出 num = 38。

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

挑战 

你可以不用任何的循环或者递归算法,在 O(1) 的时间内解决这个问题么?


递归法

public int addDigits1(int num) {        return getResult(num);    }    public int getResult(int num) {        if (num < 10) return num;        int temp = num;        int sum = 0;        while (temp != 0) {            sum += temp % 10;            temp /= 10;        }        return getResult(sum);    }


复杂度o(1)

通过枚举发现有规律,即若数为9的倍数,则结果为9,若不是则各位相加的结果为对九取余.

 public int addDigits(int num) {        if (num == 0) return 0;        int result = num % 9;        if (result == 0) return 9;        return result;    }



原创粉丝点击