# 77. 组合
给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
/**
* @param {number} n
* @param {number} k
* @return {number[][]}
*/
var combine = function(n, k) {
let res = [];
if (n < k || n === 0) return [];
if (k === 1) {
for (let i = 1; i < n+1; i++) {
res.push([i]);
}
return res;
}
const array = Array.from({ length: n }, (v, k) => k+1);
if (n === k) return [array];
function backTrack(recived, could) {
if (could.length === k) {
res.push(could.slice(0));
}
for (let i = recived; i < n+1; i++) {
could.push(i);
could.length < k+1 && backTrack(i+1, could.slice(0));
could.pop();
}
}
backTrack(1, [])
return res;
};
console.log(combine(2, 2))
总结:
回溯算法, 往往配合递归实现,将当前值带到下一次计算中; 先枚举出特殊情况,本题的要点是开始值可以是数组中的任意一个, 所以采用迭代包裹着每一次回溯;