首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我不明白出于置换目的的递归调用中拼接方法是如何工作的

我不明白出于置换目的的递归调用中拼接方法是如何工作的
EN

Stack Overflow用户
提问于 2021-11-12 03:06:35
回答 1查看 51关注 0票数 0

我在一个关于排列的算法上遇到了一点问题,我在全栈溢出中找到了它。

代码语言:javascript
复制
 function permutator(inputArr) {
  var results = [];

  function permute(arr, memo) {
    var cur, memo = memo || [];

    for (var i = 0; i < arr.length; i++) {
      cur = arr.splice(i, 1);
      if (arr.length === 0) {
        results.push(memo.concat(cur));
      }
      permute(arr.slice(), memo.concat(cur));
      arr.splice(i, 0, cur[0]);(what's the purpose of this statement ????)
    }

    return results;
  }

  return permute(inputArr);
}

实际上,我不明白递归调用是如何工作的,我不明白在这个递归调用中拼接方法是如何工作的,我的意思是,举个例子,让我们在每次迭代中运行cur = arr.splice(i,1)时,取一个由0,1, 2,3,4,5,6,7组成的数组,通常我们得到cur =0,然后cur =2,然后4,然后6,依此类推,所以当我在控制台中记录memo和arr变量时,我得到了这个enter image description here

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-12 05:11:16

这是一个复杂的方法来解决这类问题,为了理解这一点,我们需要简化问题,

经过一些修改后,这段代码的可读性更好!

代码语言:javascript
复制
function permutator(inputArr) {
    var results = [];
    function permute(arr, memo = []) {
        for (var i = 0; i < arr.length; i++) {
            let temp = [...arr], mem = memo.concat(temp.splice(i, 1));
            if (temp.length === 0) results.push(mem);
            permute(temp, mem);
        }
    }
    permute(inputArr);
    return results
}
console.log(permutator([1, 2, 3]))

因此,基本上在原始代码中,它们修改arr (仅在很短的时间内),然后(在本行中为arr.splice(i, 0, cur[0]);)恢复回其原始状态。

splice方法接受3个参数(start, deleteCount?, ...items?),并返回一个包含已删除元素的数组。我建议你多读一些关于Array.splice()的文章,

示例:

代码语言:javascript
复制
let numbers = [1, 2, 3, 4, 5];
console.log({ numbers })

let deleted_elements = numbers.splice(0, 2);
console.log('Removing first 2 elements from `numbers`', { deleted_elements, numbers })

numbers.splice(0, 0, ...deleted_elements);
console.log("Push `deleted_elements` in there original place", { numbers })

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69937474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档