给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
解法:回溯求满足个数的全排列
class Solution {
public List<List<Integer>> combine(int n, int k) {
int[] num=new int[n];
for(int i=0;i<n;i++) {
num[i]=i+1;
}
List<Integer> l=new ArrayList<>();
List<List<Integer>> list=new ArrayList<>();
hs(list,l,0,k,0,num);
// for(int i=0;i<list.size();i++) {
// for(int j=0;j<list.get(i).size();j++) {
// System.out.print(list.get(i).get(j)+" ");
// }
// System.out.println("");
// }
return list;
}
public void hs(List<List<Integer>> list,List<Integer> l,int start,int k,int sum,int[] num) {
if(sum>k)
return ;
if(sum==k) {
list.add(new ArrayList<Integer>(l));
}
for(int i=start;i<num.length;i++) {
if(sum>k)
break;
l.add(num[i]);
hs(list,l,i+1,k,sum+1,num);
l.remove(l.size()-1);
}
}
}