vector<vector<int> > combine(int n, int k) { ret.clear(); vector<int> ans; ans.clear(); combineHelper(ans, n, k, 1); return ret; }
vector<vector<int> > combine(int n, int k) { vector<int> subans; vector<vector<int>> ans; if(n < k) return ans; combineHelper(ans, subans, 1 , n, k); return ans; }
vector<vector<int> > combine(int n, int k) { // Note: The Solution object is instantiated only once and is reused by each test case. vector<vector<int> > result; vector<int> oneSolution; combineHelper(k, n, oneSolution, result,1); return result; }
void combineHelper(int k, int n, vector<int> s, vector<vector<int> > &r,int index){ //base if (k==0){ r.push_back(s); return; } if (index <= n) { //choose current one: s.push_back(index); combineHelper(k-1, n, s, r, index+1); //or not choose. s.pop_back(); combineHelper(k, n, s, r, index+1); } }
void combineHelper(vector<int> &ans, int n, int k,int index) { if(k == 0) { ret.push_back(ans); return; } int i; for(i = index;i <= n;i ++) { ans.push_back(i); combineHelper(ans,n,k-1,i+1); ans.pop_back(); } }
void combineHelper(vector<vector<int>> &ans, vector<int>& subans, int i, int n, int k){ if(k == 0){ ans.push_back(subans); return; } if(k > n - i + 1){ return; } for(;i <= n; i++){ subans.push_back(i); combineHelper(ans, subans, i + 1, n, k - 1); subans.pop_back(); } }