题目简述
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。
你可以按 任何顺序 返回答案。
示例 1:
- 输入: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) {
const res = []
function backTrack (index, arr) {
if (arr.length === k) {
res.push([...arr])
return
}
for(let i = index; i <= n; i++) {
arr.push(i)
backTrack(i + 1, arr)
arr.pop()
}
}
backTrack(1, [])
return res
};
- 问题分析
- 因为要寻找的结果数组长度为
k
,是不定的,所以我们通过对[1, n]
递归,将数字填入结果数组中。 backTrack
作用:遍历从index
到n
的数,这些都是当前可以填充的数据,填入结果数组后进行递归调用,然后将该位换为下一个数。- 回溯终止条件:结果数组长度等于预期的
k
- 回溯可能性:
[index, n]
- 因为要寻找的结果数组长度为