function generateCombinations(elements, k) {
const combinations = [];
function combine(start, combo) {
if (combo.length === k) {
combinations.push(combo.slice()); // 复制当前组合并添加到结果数组中
return;
}
for (let i = start; i < elements.length; i++) {
combo.push(elements[i]);
combine(i + 1, combo); // 递归调用
combo.pop(); // 回溯,移除最后一个元素
}
}
combine(0, []);
return combinations;
}
// 示例
const elements = [1, 2, 3, 4, 5];
const k = 3;
const allCombinations = generateCombinations(elements, k);
console.log(allCombinations);
解释
函数 generateCombinations:接受两个参数,elements 是包含所有元素的数组,k 是要选择的元素数量。
函数 combine:这是一个递归函数,用于生成所有可能的组合。它有两个参数,start 表示当前递归的起始索引,combo 表示当前正在构建的组合。
递归逻辑:
当 combo 的长度达到 k 时,将 combo 的副本添加到结果数组 combinations 中。
对于从 start 开始的每一个元素,将其加入到 combo 中,然后递归调用 combine。
递归完成后,从 combo 中移除最后一个元素,回溯到上一步。