给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
代码
class Solution {
List<List<Integer>> cList=new ArrayList<>();
public List<List<Integer>> combine(int n, int k) {
comb(n,k,new ArrayList<>(),new boolean[n+1],1);
return cList;
}
public void comb(int n, int k,List<Integer> list,boolean[] check,int pos) {
if(k==0)//边界
{
cList.add(new ArrayList<>(list));
return;
}
for(int i=pos;i<=n;i++)//选择
{
if(check[i]) continue;
list.add(i);
check[i]=true;
comb(n,k-1,list,check,i+1);
check[i]=false;//回溯
list.remove(list.size()-1);
}
}
}