一尘不染

JavaScript中的排列?

javascript

我正在尝试编写一个执行以下操作的函数:

  • 将整数数组作为参数(例如[1,2,3,4])
  • 创建所有[1,2,3,4]可能排列的数组,每个排列的长度为4

下面的函数(我在网上找到了它)通过将字符串作为参数并返回该字符串的所有排列来实现

我无法弄清楚如何对其进行修改以使其与整数数组一起工作,(我认为这与某些方法在字符串上的处理方式与在整数上的处理方式不同有关,但是我不确定。 ..)

var permArr = [], usedChars = [];
function permute(input) {
  var i, ch, chars = input.split("");
  for (i = 0; i < chars.length; i++) {
    ch = chars.splice(i, 1);
    usedChars.push(ch);
    if (chars.length == 0)
      permArr[permArr.length] = usedChars.join("");
    permute(chars.join(""));
    chars.splice(i, 0, ch);
    usedChars.pop();
  }
  return permArr
};

注意:我正在寻找使函数返回 整数 数组, 而不是 字符串 数组的 方法

我真的需要使用JavaScript的解决方案。我已经想出了如何在python中做到这一点


阅读 436

收藏
2020-04-23

共1个答案

一尘不染

如果您注意到,代码实际上会在进行任何置换之前将字符拆分成数组,因此您只需删除联接和拆分操作

var permArr = [],

  usedChars = [];



function permute(input) {

  var i, ch;

  for (i = 0; i < input.length; i++) {

    ch = input.splice(i, 1)[0];

    usedChars.push(ch);

    if (input.length == 0) {

      permArr.push(usedChars.slice());

    }

    permute(input);

    input.splice(i, 0, ch);

    usedChars.pop();

  }

  return permArr

};





document.write(JSON.stringify(permute([5, 3, 7, 1])));
2020-04-23