手写算法
https://leetcode-cn.com/problems/add-to-array-form-of-integer/
- 题目描述:
- 整数的 数组形式 num 是按照从左到右的顺序表示其数字的数组。
- 例如,对于 num = 1321 ,数组形式是 [1,3,2,1] 。给定 num ,整数的 数组形式 ,和整数 k ,返回 整数 num + k 的 数组形式 。
- 示例 ```javascript 示例1: 输入:num = [1,2,0,0], k = 34 输出:[1,2,3,4] 解释:1200 + 34 = 1234
示例2: 输入:num = [2,7,4], k = 181 输出:[4,5,5] 解释:274 + 181 = 455
示例3: 输入:num = [2,1,5], k = 806 输出:[1,0,2,1] 解释:215 + 806 = 1021
- 解题:
```javascript
var addToArrayForm = function(num, k) {
let result = [];
let len = num.length
for (let i=len-1;i>=0;i--) {
let sum = num[i]+k%10
k = Math.floor(k/10)
if (sum>=10) {
k++
sum = sum-10
}
result.push(sum)
}
for (;k>0;k=Math.floor(k/10)) {
result.push(k%10)
}
result.reverse()
return result
};
- 问题:少了10进1这种情况,最后参考了答案
编程题
1.手写函数柯里化 ```javascript function curry(func) { //此处补全 return function fn(…args) { if(args.length>=func.length) {
} else {return func.apply(this,args)
} } } function sum(a, b, c) { return a + b + c; }return function(...args2) {
return fn.apply(this,args.concat(args2))
}
let curriedSum = curry(sum);
alert(curriedSum(1, 2, 3)); // 6, still callable normally alert(curriedSum(1)(2, 3)); // 6, currying of 1st arg alert(curriedSum(1)(2)(3)); // 6, full currying
- 柯里化&偏函数
<a name="eWev7"></a>
### 额外问题补充
- 函数柯里化是否需要考虑this?
- 需要考虑柯里化: 函数是执行调用决定作用域链 柯里化考虑this可以保证不会修改封装的函数的作用域链不被改变
- 需要考虑柯里化:如果执行柯里化的函数与作用域链上的数据无关时候(返回结果只受传入的参数影响时)可以不考虑this指向
- ...如何使用es5实现
```javascript
//es6
function ab(...args){
console.log(args)
}
//es5
function ab() {
for (
var _len = arguments.length, args = new Array(_len), _key = 0;
_key < _len;
_key++
) {
args[_key] = arguments[_key];
}
console.log(args);
}
算法题是否可以不使用额外的空间?
var addToArrayForm = function (num, k) {
for(let i=num.length-1;i>=0;i--) {
num[i] = num[i]+(k%10)
k = Math.floor(k/10)
if (num[i]>=10) {
num[i] =num[i] - 10
k++
}
}
for (;k>0;k=Math.floor(k/10)) {
num.unshift(k%10)
}
return num
};