题目要求
给定两个整数n和k,返回1 … n中所有可能的k个数的组合。
例如下图:
解题思路
对于1到n个整数进行k个组合,可以这样构造一个递归树,对与 整数i来说,只要能从i到n中找到k-1个元素即可,在这个递归过程中记录递归结果,等记录到k个结果时,就返回。
JAVA代码
class Solution {
List<List<Integer>> res = new ArrayList<>();
public List<List<Integer>> combine(int n, int k) {
if(n<=0||k<=0||k>n) return res;
combineAux(n,k,1,new ArrayList<Integer>());
return res;
}
private void combineAux(int n,int k,int sta,List<Integer> t){
if(t.size()==k){
res.add(new ArrayList(t));
return;
}
for(int i = sta;i<=n-(k-t.size())+1;i++){
t.add(i);
combineAux(n,k,i+1,t);
t.remove(t.size()-1);
}
}
}