如何在 JavaScript 中生成全排列和全组合?

实现 JavaScript 函数以生成数组的全排列和全组合。

算法与数据结构 中等 算法 数据结构 JavaScript

在全排列中,所有元素按照顺序进行排列,通常使用回溯算法实现;在全组合中,需要生成所有可能子集(power set),也称为完整组合,常通过类似方式实现。以下是在 JavaScript 中实现的函数。

一、全排列(Permutations)
实现一个 generatePermutations 函数:遍历所有可能的顺序排列序列。

function generatePermutations(arr) {
  let results = [];
  
  function permute(remaining, current = []) {
    if (remaining.length === 0) {
      results.push([...current]);
      return;
    }
    
    for (let i = 0; i < remaining.length; i++) {
      current.push(remaining[i]);
      let newRemaining = remaining.slice(0, i).concat(remaining.slice(i + 1));
      permute(newRemaining, current);
      current.pop();
    }
  }
  
  permute(arr);
  return results;
}

// 调用示例: generatePermutations([1, 2, 3])

二、全组合(Combinations 或 Power Set)
实现一个 generatePowerSet 函数:生成所有子集的集合,包含所有元素数量的可能组合。

function generatePowerSet(arr) {
  const subsets = [[]];
  
  for (let i = 0; i < arr.length; i++) {
    const lastIdx = subsets.length;
    for (let j = 0; j < lastIdx; j++) {
      const newSubset = [...subsets[j], arr[i]];
      subsets.push(newSubset);
    }
  }
  
  return subsets;
}

// 调用示例: generatePowerSet([1, 2, 3])