77. 组合
题目描述
给定两个整数 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]]
提示
- 1 <= n <= 20
- 1 <= k <= n
思路
回溯暴力结题
- 定义 temp数组临时存放选出来的数
- 只要 temp的长度 等于 k 即是答案的子集 push 进result数组 终止
- 遍历选择数字
/**
* @param {number} n
* @param {number} k
* @return {number[][]}
*/
var combine = function(n, k) {
let result = [];
let temp = [];
let backTracking = function(n, k, t){
//终止条件
if(temp.length === k) {
result.push([...temp]);
return;
}
//遍历选择数字
//k - temp.length 代表temp还需要多少为才能满足条件
//n-(k - temp.length)+ 1 代表满足temp能够到达的数字 +1 是因为 i本身占了一个数字长度
for(let i = t; i <= n - (k - temp.length) + 1; ++i){
//处理数字 push进temp
temp.push(i);
//递归继续找 直至temp满足长度
backTracking(n, k, i + 1);
//换下一个数字做组合
temp.pop();
}
}
backTracking(n, k, 1);
return result;
};