Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.
For example,
If n = 4 and k = 2, a solution is:
[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]Analysis:
DFS problem. similar with combination sum
Java
public class Solution {
List<List<Integer>> result;
List<Integer> solu;
public List<List<Integer>> combine(int n, int k) {
result = new ArrayList<>();
solu = new ArrayList<>();
getCombine(n, k, 1);
return result;
}
public void getCombine(int n, int k, int st){
if(solu.size() == k){
result.add(new ArrayList<>(solu));
return;
}
for(int i=st;i<=n;i++){
solu.add(i);
getCombine(n, k,i+1);
solu.remove(solu.size()-1);
}
}
}
c++
class Solution {
public:
void getCombine(
int n,
int k,
int level,
vector<int> &solution,
vector<vector<int>> &result){
if(solution.size() == k){
result.push_back(solution);
return;
}
for(int i = level; i<=n; i++){
solution.push_back(i);
getCombine(n,k,i+1,solution,result);
solution.pop_back();
}
}
vector<vector<int> > combine(int n, int k) {
vector<int> solution;
vector<vector<int>> result;
getCombine(n,k,1,solution,result);
return result;
}
};