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], ]
#include<iostream> #include<vector> #include<map> #include <algorithm> using namespace::std; #include <algorithm> #include <algorithm> class Solution { public: void findCombination(int n, int k, vector<vector<int> >& result, vector<int> path, int start) { if(n <= 0 || k <= 0) return; if(k > n) return; //cout<<path.size()<<endl; if(path.size() == k) { //cout<<"here"<<endl; result.push_back(path); } if(path.size() < k) { //vector<int> tmp_vec(path); for(int i = start; i <= n; i++) { path.push_back(i); findCombination(n, k, result, path, path.back() + 1); path.pop_back(); } } } vector<vector<int> > combine(int n, int k) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<vector<int> > result; vector<int> path; findCombination(n, k, result, path, 1); return result; } }; int main() { vector<int> input; input.push_back(1); input.push_back(2); //input.push_back(10); Solution ss; vector<vector<int> > result = ss.combine(1, 1); for(int i = 0; i < result.size(); i++) { for(int j = 0; j < result[i].size(); j++) { cout<<result[i][j]; } cout<<endl; } }
Round 2:
class Solution { public: vector<vector<int> > combine(int n, int k) { vector<vector<int> > result; if(n == 0 || k == 0) return result; vector<int> cur; dfs(k, n, result, 1, cur); return result; } private: void dfs(int k, int n, vector<vector<int> > &result, int index, vector<int> &cur) { if(cur.size() == k) { result.push_back(cur); return; } if(index > n) return; dfs(k, n, result, index+1, cur); cur.push_back(index); dfs(k, n, result, index+1, cur); cur.pop_back(); } };