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], ]
We can use the same idea as generating permutation here.
C++ Code:
/* * func: combination_helper * goal: helper function for combination * @param start: number start to find * @param n: total number * @param k: total selected number * @param comb: current combination * @param result: final result set * return: */ void combination_helper(int start, int n, int k, vector<int> &comb, vector<vector<int> > &result){ if(comb.size() == k){ result.emplace_back(comb); return; } for(int i = start; i <= n; ++i){ comb.emplace_back(i); combination_helper(start+1, n, k, comb, result); comb.pop_back(); } } /* * func: combination * goal: find all combinations of k numbers in n * @param n: * @param k: * return: all possible combinations */ vector<vector<int> > combination(int n, int k){ vector<vector<int> > result; if(!(n > 0 && k > 0 && n >=k)){ return result; } vector<int> comb; combination_helper(1, n, k, comb, result); return result; }
Python Code:
# func: compute combinations # @param n: # @param k: # @return: all combinations def combinations(n, k): if not n >= k > 0: return [] result = [] comb = [] def combination_helper(curr): if len(comb) == k: result.append(comb[:]) return for i in xrange(curr, n+1): comb.append(i) combination_helper(i+1) comb.pop(-1) combination_helper(1) return result
No comments:
Post a Comment