leetcode-Add Digits

探讨了在不使用循环或递归的情况下,快速计算任意非负整数各位数字之和直至结果为个位数的方法。通过观察规律,提出了一种简洁高效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:给定一个非负整数num, 重复将其各个位数上的数字进行求和操作,直到结果为1-9的数(个位数)为止。

比如: 给出num = 38 , 计算过程如下: 3 + 8 = 11 , 1 + 1 = 2,  因为2 为个位数, 返回。

要求:在 不用循环或递归的情况下,时间复杂度为O(1)  ?


一开始,没什么思路,就手动计算几个数看看。

输入:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20......

输出: 1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2.......

可以看出,输出结果为9个一循环,所以自然而然想到 以9为底,取余。但这样,9,18,这种9的倍数就为0了,所以要单独加个条件判断。

代码如下:

public class Solution {
    public int addDigits(int num) {
        if (num < 0 )  return -1;
        if (num % 9 == 0 ) return 9 ;
        return  num % 9;
        
    }
}

这样觉得有点麻烦,看看有没有更高效简短的代码,通过查询讨论区中各大神的方法,看到一种很棒的解法。


public class Solution {
    public int addDigits(int num) {
        if (num < 0 )  return -1;
        return  1 + (num - 1)%9;
        
    }
}

通过减1,加1的方式很好的避免了数为9的倍数时,取余为0的尴尬。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值