【问题标题】:all possible combinations in javascript - why pop()?javascript 中所有可能的组合 - 为什么是 pop()?
【发布时间】:2016-02-08 02:39:32
【问题描述】:

我试图理解我在网上遇到的这个函数,它返回一个字符串的所有可能组合——为什么 nextLetter.pop 需要 pop() 调用?我尝试在控制台中对此进行调试,但不清楚 pop 到底做了什么。

nextLetter.pop() 的结果 ---> [ 'bac', 'bca', 'cba', 'cab', 'acb', 'abc' ]

没有 nextLetter.pop() 的结果 --> [ 'bac', '浆果', '巴卡巴', 'baccacbaab', 'baccacbaabacb', 'baccacbaabacbbc']

function stringPermutations(str) {
  var permutations = [];
  var nextLetter = [];
  var chars = str.split('');

  permutateInner(chars);



  function permutateInner(chars) {
    if (chars.length === 0) {

      permutations.push(nextLetter.join(''));
    }
    for (var i = 0; i < chars.length; i++) {


      chars.push(chars.shift());

      nextLetter.push(chars[0]);

      permutateInner(chars.slice(1));
      //what is this doing?

      nextLetter.pop();

    }
  }
  return permutations;
}

console.log(stringPermutations('abc'));

【问题讨论】:

  • javascripts Arrays pop 方法只从数组中删除最后一个元素,并返回该元素

标签: javascript algorithm recursion


【解决方案1】:

permutateInner(chars.slice(1)); 对数组子集[1..n] 进行递归。它包括对当前数组的每个子数组也有排列。

例如当前首字母为b时,递归包括排列acca。当前首字母为a时,递归包括排列cbbc

把它放在那里很重要,否则你只会得到结果 [ 'abc', 'bca', 'cba' ]

【讨论】:

    【解决方案2】:

    从顶部开始,很明显nextLetterArray——所以我首先要看的是docs on MDN

    正如文档所说,.pop() 方法从 Array 中删除最后一个元素并返回它——在您的示例代码中,返回值没有被使用,所以很明显有用的是删除的副作用最后一个元素。

    【讨论】:

    • 我了解 pop 本身的作用,但不了解它在 for 循环内递归上下文中的作用
    猜你喜欢
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 2012-05-13
    • 2012-03-27
    • 1970-01-01
    • 2015-10-05
    相关资源
    最近更新 更多