Add Digits
2016-06-09 05:37
465 查看
Given a non-negative integer
one digit.
For example:
Given
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;
};
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
2has
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;
};
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享