classSolution { public: vector<vector<int>> combine(int n, int k) { returnselection(1, n, k); }
private: vector<vector<int>> selection(int begin, int end, int k) { if (begin > end || k <= 0 || end - begin + 1 < k) return {}; vector<vector<int>> ans, subAns; // choose begin subAns = selection(begin + 1, end, k - 1); for (int i = 0; i < subAns.size(); i++) subAns[i].insert(subAns[i].begin(), begin); if (subAns.empty()) subAns = {{begin}}; ans.insert(ans.end(), subAns.begin(), subAns.end()); // not choose begin subAns = selection(begin + 1, end, k); ans.insert(ans.end(), subAns.begin(), subAns.end());