知识点
回溯
思路
数据范围很小,可以考虑回溯的方法。从1开始向n搜索,直到待选个数为0或者已经超出范围时停止,同时维护路径,如果满足条件则将当前路径加入答案中。因为要求字典序,所以我们优先选择保留当前数字的路径。
AC code(C++)
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @param k int整型 * @return int整型vector<vector<>> */ vector<vector<int> > combine(int n, int k) { vector<vector<int>> res; function<void(vector<int>&, int, int)> dfs = [&](vector<int>& path, int x, int u) { if (u == 0 or x > n) { if (x <= n + 1 and u == 0) { res.push_back(path); } return; } path.push_back(x); dfs(path, x + 1, u - 1); path.pop_back(); dfs(path, x + 1, u); }; vector<int> p; dfs(p, 1, k); return res; } };