1 题目理解
Given two integers n and k, return all possible combinations of k numbers out of 1 … n.
You may return the answer in any order.
输入:两个int n和k。
规则:从1到n,n个数选择k个数,做成组合。
输出:返回所有的组合
2 回溯
[1,n]每个数都可能选择或者不选择。
class Solution {
private List<List<Integer>> answer;
private int n;
public List<List<Integer>> combine(int n, int k) {
answer = new ArrayList<List<Integer>>();
this.n = n;
List<Integer> list = new ArrayList<Integer>();
dfs(1,k,list);
return answer;
}
private void dfs(int current,int k,List<Integer> list){
if(list.size()==k){
answer.add(new ArrayList<Integer>(list));
return;
}
if(list.size() +(n-current+1)<k) return;
if(current>n) return;
list.add(current);
dfs(current+1,k,list);
list.remove(list.size()-1);
dfs(current+1,k,list);
}
}