组给出两个整数n和k,返回从1......n中选出的k个数的组合。
样例
例如 n = 4 且 k = 2
返回的解为:
[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4]]
public class Solution {
/**
* @param n: Given the range of numbers
* @param k: Given the numbers of combinations
* @return: All the combinations of k numbers out of 1..n
*/
public static List<List<Integer>> combine(int n,int k){
List<List<Integer>> result=new ArrayList<List<Integer>>();
if(k>n){
return result;
}
ArrayList<Integer> tempList=new ArrayList<Integer>();
backTracking(n, 1, k, result, tempList);
return result;
}
private static void backTracking(int n,int start,int k,List<List<Integer>> result,ArrayList<Integer> tempList){
if(k<0){
return;
}else if(k==0){
result.add(new ArrayList<Integer>(tempList));
}else{
for(int i=start;i<=n;i++){
tempList.add(i);
backTracking(n, i+1, k-1, result, tempList);
tempList.remove(tempList.size()-1);
}
}
}
}