Combinations
Q:
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], ]
A:
费了九虎二牛之力写了这么个diao程序,烦躁了。
class Solution { public: vector<vector<int> > combine(int n, int k) { // Start typing your C/C++ solution below // DO NOT write int main() function if (k > n) { return vector<vector<int> >(); } return combineInternal(1, n, k); } private: vector<vector<int> > combineInternal(int begin, int end, int k) { vector<vector<int> > results; if (end - begin < k - 1) { return results; } if (end - begin == k - 1) { vector<int> result; for (int i = begin; i <= end; ++i) { result.push_back(i); } results.push_back(result); return results; } if (k == 1) { vector<int> result; result.resize(1); for (int i = begin; i <= end; ++i) { result[0] = i; results.push_back(result); } return results; } for (int i = begin; i <= end - k + 1; ++i) { vector<int> result; result.push_back(i); vector<vector<int> > part_results = combineInternal(i + 1, end, k - 1); if (part_results.empty()) results.push_back(result); for (int j = 0; j < part_results.size(); ++j) { result.resize(1); result.insert(result.end(), part_results[j].begin(), part_results[j].end()); results.push_back(result); } } return results; } };
Passion, patience, perseverance, keep it and move on.

浙公网安备 33010602011771号