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?



首先说一下我的思路,因为题目要求时间复杂度为1,所以不能使用循环,所以我就想到使用递归算法,但是递归算法的复杂度也不是1,我的代码如下:

public class Solution {
    public int addDigits(int num) {
if(num / 10 == 0) return num;
return addDigits(change(num));
}
public static int change(int num) {
if(num == 0) return num;
return num % 10 + change(num / 10);
}
}

之后我在网上搜了一下最简单的算法,发现才有一行,这个算法如下:

public int addDigits(int num) {

return (num - 1) % 9 + 1;

    }
这个算法是通过观察,来的出来的结论,每个数的最后结果是以9为一趟循环,

1 1

2 2

3 3

4 4

5 5

6 6

7 7

8 8

9 9

10 1

11 2

12 3

13 4

14 5

16 7

17 8 

18 9 

19 1

这个就是规律,很明显。


    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值