一、手写算法

https://leetcode-cn.com/problems/add-to-array-form-of-integer/

思路

  • 考虑到整数相加需要进位,进位处理
  • 整数数组和整数长度问题
  • 整数数组的最低位和k的最低位相加,再加进位,每次计算后得到下一次是否需要进位,再把k除10,保证下次取取最末位
  • 用push和reverse搭配,时间复杂度相比unshift较低

    代码

    1. /**
    2. * @param {number[]} num
    3. * @param {number} k
    4. * @return {number[]}
    5. */
    6. var addToArrayForm = function(num, k) {
    7. var len = num.length - 1,sum = 0;
    8. var carry = 0,res = [];
    9. while(len>=0||k>0){
    10. // 找到最低位
    11. var low = k%10;
    12. // 其他剩余数值
    13. k = Math.floor(k/10);
    14. // 逐位相加,并加进位
    15. sum = Math.floor((num[len] ?num[len]:0) + (low?low:0) + carry);
    16. // 下一次是否需要进位
    17. carry = Math.floor(sum/10);
    18. // 当前位数字
    19. var val = sum%10;
    20. res.push(val)
    21. len--;
    22. }
    23. if(carry>0){
    24. res.push(carry)
    25. }
    26. return res.reverse();
    27. };

    复杂度分析

  • 时间复杂度:O(max(n,k)),其中 n 为数组的长度

  • 空间复杂度:O(1)

二、编程题

  1. //1.手写函数柯里化
  2. function curry(func) {
  3. //此处补全
  4. }
  5. function sum(a, b, c) {
  6. return a + b + c;
  7. }
  8. let curriedSum = curry(sum);
  9. alert(curriedSum(1, 2, 3)); // 6, still callable normally
  10. alert(curriedSum(1)(2, 3)); // 6, currying of 1st arg
  11. alert(curriedSum(1)(2)(3)); // 6, full currying
  1. //1.手写函数柯里化
  2. function curry(func) {
  3. //此处补全
  4. return function curried(...args) {
  5. if (args.length >= func.length) {
  6. return func.apply(null, args)
  7. } else {
  8. return function (...args1) {
  9. return curried.apply(null, args.concat(args1))
  10. }
  11. }
  12. }
  13. }