一、手写算法
https://leetcode-cn.com/problems/add-to-array-form-of-integer/
思路
- 考虑到整数相加需要进位,进位处理
- 整数数组和整数长度问题
- 整数数组的最低位和k的最低位相加,再加进位,每次计算后得到下一次是否需要进位,再把k除10,保证下次取取最末位
用push和reverse搭配,时间复杂度相比unshift较低
代码
/*** @param {number[]} num* @param {number} k* @return {number[]}*/var addToArrayForm = function(num, k) {var len = num.length - 1,sum = 0;var carry = 0,res = [];while(len>=0||k>0){// 找到最低位var low = k%10;// 其他剩余数值k = Math.floor(k/10);// 逐位相加,并加进位sum = Math.floor((num[len] ?num[len]:0) + (low?low:0) + carry);// 下一次是否需要进位carry = Math.floor(sum/10);// 当前位数字var val = sum%10;res.push(val)len--;}if(carry>0){res.push(carry)}return res.reverse();};
复杂度分析
时间复杂度:O(max(n,k)),其中 n 为数组的长度
- 空间复杂度:O(1)
二、编程题
//1.手写函数柯里化function curry(func) {//此处补全}function sum(a, b, c) {return a + b + c;}let curriedSum = curry(sum);alert(curriedSum(1, 2, 3)); // 6, still callable normallyalert(curriedSum(1)(2, 3)); // 6, currying of 1st argalert(curriedSum(1)(2)(3)); // 6, full currying
//1.手写函数柯里化function curry(func) {//此处补全return function curried(...args) {if (args.length >= func.length) {return func.apply(null, args)} else {return function (...args1) {return curried.apply(null, args.concat(args1))}}}}
