您的位置:首页 > Web前端 > JavaScript

Add Digits

2016-06-09 05:37 465 查看
Given a non-negative integer 
num
, repeatedly add all its digits until the result has only
one digit.

For example:

Given 
num = 38
, the process is like: 
3
+ 8 = 11
1 + 1 = 2
. Since 
2
 has
only one digit, return it.

Follow up:

Could you do it without any loop/recursion in O(1) runtime?

Tag:

Math

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

The question is pretty clear.

The initial thought is just follow the way it is described.

Checkin in every number, add up each numbers and if it is less than 10, return the result.

So we have:

/**
* @param {number} num
* @return {number}
*/
var addDigits = function(num) {
var num_arr = num.toString().split('');
var ret = num_arr.reduce(function(a,b){
return parseInt(a)+parseInt(b);
},0);

if(ret<10) {
return ret;
} else {
return addDigits(ret);
}
};
Time complexity: O(n)

Space complexity: O(1)

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Follow up:

Could
you do it without any loop/recursion in O(1) runtime?

We need to find out the rule hold for it.

Mimic by sketch

1 - 9 => 1-9

10 => 1

11 => 2

12 => 3

13 => 4

...

18 => 9

19 => 0

20 => 2

...

It follows the rules by multiple of 9

/**
* @param {number} num
* @return {number}
*/
var addDigits = function (num) {
return (num - 1) % 9 + 1;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息