Given a non-negative integer
Givennum
, repeatedly add all its digits until the result has only one digit.num = 38
, the process is like:3 + 8 = 11
,1 + 1 = 2
. Since2
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 num的长度,如果小于10 就返回;然后for循环内依次得到每个位上的值并且添加;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);
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;