classSolution { public: vector<vector<int>> combine(int n, int k) { vector<vector<int>> res; vector<int> path; dfs(res, path, n, k, 1); return res; }
voiddfs(vector<vector<int>>& res, vector<int>& path, int n, int k, int start){ if (path.size() == k) { res.push_back(path); return; } for (int i = start; i <= n; i++) { // 对于剩余的元素,分别选或者不选进行递归于回溯 path.push_back(i); dfs(res, path, n, k, i + 1); path.pop_back(); } } };
classSolution { public: vector<vector<int>> combine(int n, int k) { vector<vector<int>> res; vector<int> path; dfs(res, path, n, k, 1); return res; }
voiddfs(vector<vector<int>>& res, vector<int>& path, int n, int k, int start){ if (path.size() == k) { res.push_back(path); return; } if(path.size()+(n-start)+1<k) return ; for (int i = start; i <= n; i++) { path.push_back(i); dfs(res, path, n, k, i + 1); path.pop_back(); } } };