跳到主要内容

简述 JS 的全排列 ?

参考答案:

全排列是从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时,所有的排列情况称为全排列。

在JavaScript中,全排列的实现可以通过递归和回溯算法来完成。基本思路是建立位置数组,对位置进行排列,排列成功后转换为元素的排列。然后,建立递归函数,用来搜索第n个位置。这个搜索过程与八皇后问题类似。

此外,全排列的代码也可以从两个维度进行分析:for循环横向遍历和递归纵向遍历。可以使用一个used数组来记录当前path里都有哪些元素被使用过,因为一个排列中,一个元素只能使用一次。

以下是一个简单的JavaScript实现全排列的例子:

function permute(nums) {
  const res = [];
  const backtrack = (path, first) => {
    if (path.length === nums.length) {
      res.push(path.slice());
      return;
    }
    for (let i = first; i < nums.length; i++) {
      const used = path.includes(nums[i]);
      if (used) continue;
      path.push(nums[i]);
      backtrack(path, i + 1);
      path.pop();
    }
  };
  backtrack([], 0);
  return res;
}

console.log(permute([1, 2, 3]));

这段代码会输出 [ [ 1, 2, 3 ], [ 1, 3, 2 ], [ 2, 1, 3 ], [ 2, 3, 1 ], [ 3, 2, 1 ], [ 3, 1, 2 ] ],即数组 [1, 2, 3] 的所有可能的全排列。