如何在 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])