LeetCode 258 Add Digits

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;
};

  

原文地址:https://www.cnblogs.com/xingguozhiming/p/9386154.html