leetcode 上做了一题比较有意思,记录一下,传送门:https://leetcode.com/problems/add-digits/description/
题目意思是:给一个正整数a,让其个位,十位,百位·····一直到最高位加起来得到另一个数字b,然后再对数字b重复这个过程,直到相加的到的数字为个位数时返回
举例说明:
例如输入234,返回值为2+3+4=9
输入78,第一步7+8=15,第二步1+5=6,返回6
多试几个发现有以下规律
输入 | 输出 |
29 | 2 |
28 | 1 |
27 | 9 |
26 | 8 |
25 | 7 |
24 | 6 |
23 | 5 |
22 | 4 |
21 | 3 |
20 | 2 |
······ | ······· |
发现输出的数为输入数字的取余(9的倍数和小于9的数字除外)
验证也不难,推导过程如下:
假设输入数字为num,可将num拆分为个位数字乘以1,十位数字乘以十,百位数字乘以100,以此类推到最高位,
数学表达式表示为:input=n1*1+n2*10+n3*100+·····(n1,n2,n3···分别表示个位数字,十位数字,百位数字····)
执行一次之后:ouput=n1+n2+n3+·····(n1,n2,n3···分别表示个位数字,十位数字,百位数字····)
input - output = 9 * (1/9 * n1+n2+11*n3+111*n4+·········)=9*sum(sum为一个常量)
所以最后的代码为(javascript):
var addDigits = function(num) { if(num<9) return num; if(num%9===0) return 9; return num%9; };