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],]
class Solution { private: vector<vector<int> > ret; vector<int> a; public: void solve(int dep, int maxDep, int n, int start) { if (dep == maxDep) { ret.push_back(a); return; } for(int i = start; i <= n; i++) { a[dep] = i; solve(dep + 1, maxDep, n, i + 1); } } vector<vector<int> > combine(int n, int k) { // Start typing your C/C++ solution below // DO NOT write int main() function a.resize(k); ret.clear(); solve(0, k, n, 1); return ret; } };
- 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;
- }