给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。
你可以按 任何顺序 返回答案。
示例 1:
输入:n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
示例 2:
输入:n = 1, k = 1
输出:[[1]]
回溯法
var combine = function(n, k) {
const result = []
const nums = new Array(n).fill(-1).map((i, index) => index + 1) // 生成需要循环的元素集合
const helper = (curArr, startIndex) => { // 回溯函数
if (curArr.length === k) { // 当 curArr 长度等于 k 时候,放进结果集中,并返回。
result.push(curArr.slice()); // 浅拷贝一下。
return
}
for (let i = startIndex; i < n; i++) {
curArr.push(nums[i]) // 从 nums 某一位下标开始,依次循环后面的元素,push 进 curArr,
helper(curArr, i + 1); // 然后进行下次递归
curArr.pop() // 撤销刚才的 push 操作,继续本次递归的 for 循环
}
}
helper([], 0)
return result
};