leetcode 258 Add Digits(java)

Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.

Given num = 38, the process is like: 3 + 8 = 111 + 1 = 2. Since 2 has only one digit, return it.
给你一个非负数,添加他们每个数字直到它成为一个数字,(这里大家注意英语区别了)
_________________________________________延伸
number  表示数字 代表一个种概念 212,152,5,1000,254,都是number
而digits 也表示数字 表示阿拉伯数字代表 0 1 2 3 4 5 6 7 8 9 ,代表组成的阿拉伯数字。
意思就是说词语与汉子的区别,英文单词与字母的区别, letter 与 word
____________________________________________

正题
按照正常思想来递归
    int length = 1;
         length= String.valueOf(num).length();
        if(num<10)return num;
        int sum=0;
        for(int i=1;i<=length;i++){
            sum+=(num%10);
            num= (num-num%10)/10;
        }
        return addDigits(sum);
首先获取到int num的长度,如果小于10 就返回;然后for循环内依次得到每个位上的值并且添加;
num%10得到个位的值(如355得到5),num-num%10 得到去除个位的数字(如355-5=350)。再除10(350/10=35)进而循环得到每个位置的值,最后递归方法得到小于10的值就是我们需要的了;

通过观察规律来总结
输入 0 1 2 3 4 5 6 7 8 9 ,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,,,,,
需返 0,1,2,3,4,5,6,7,8,9, 1,  2,   3,   4,   5,   6,  7,  8,  9,  1,2  , ,3 ,4,  5,  6 , 7..
我们产生映射关系。除了9的倍数 ,不管输入是什么 数字除9取余  都是我们需要得到的数也就是 num%9;
所以我们有
        if(num<10)return num;
        return num%9==0?9:num%9;
即可。

 
 
 
 
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值