手写算法
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
- 解题:```javascriptvar addToArrayForm = function(num, k) {let result = [];let len = num.lengthfor (let i=len-1;i>=0;i--) {let sum = num[i]+k%10k = 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//es6function ab(...args){console.log(args)}//es5function 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] - 10k++}}for (;k>0;k=Math.floor(k/10)) {num.unshift(k%10)}return num};
