题目描述
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
思路
动态规划法:从n个数中选择m个组合的问题可以拆分成两个子问题:
- 选择n个数中的第一个数,然后从剩下的n-1个数中选择m-1个数
- 不选择n个数中的第一个数,从剩下的n-1个数中选择m个数
代码
/**
* @param {number} n
* @param {number} k
* @return {number[][]}
*/
var combine = function(n, k) {
var res = [];
var tmp = [];
subCombine(n,k,1,res,tmp);
return res;
};
function subCombine(n,k,index,res,tmp){
if(n-index+1<k){
return;
}
if(k==0){
res.push(tmp.concat());
return;
}
tmp.push(index);
subCombine(n,k-1,index+1,res,tmp)
tmp.pop();
subCombine(n,k,index+1,res,tmp)
}