Problem Description:
Given-integers n and K, return all possible combinations ofK numbers out of 1 ... n.
For example,
If N = 4 and k = 2, a solution is:
[ [2,4], [3,4], [ 2,3], [up], [1,3], [1,4],]
Basic idea:
Backtracking method
Code:
Vector<int> record; C + + vector<vector<int> >result; set<vector<int> > MySet; int knum = 0; void Addsolution () {vector<int> tmp (Record.begin (), Record.end ()); Sort (Tmp.begin (), Tmp.end ()); if (Myset.find (tmp) = = Myset.end ()) {result.push_back (TMP); Myset.insert (TMP); }} void Subcombinationsum (vector<int> &cadidates,int bpos,vector<int> &base, int k) {if ( Knum = = k) {addsolution (); } int size = Cadidates.size (); for (int i = BPOs; i < size; i++) {if (base[i] = = 1) continue; Record.push_back (Cadidates[i]); Base[i] = 1; knum++; Subcombinationsum (Cadidates,<span style= "color: #FF0000;" ><STRONG>I+1</STRONG></SPAN>,BASE,K); I+1 avoid repeating record.pop_back (); Base[i] = 0; Knum--; }} vector<vector<int> > combine (int n, int k) {vector<int> candidates (n); for (int i = 0; i < n; i++) candidates[i] = i+1; Vector<int> Base (candidates.size (), 0); Subcombinationsum (CANDIDATES,0,BASE,K); return result; }
[Leetcode] Combinations