题解 | #牛棚分组#
牛棚分组
https://www.nowcoder.com/practice/d5740e4dde3740828491236c53737af4
知识点:
回溯/DFS
分析:
for(int i = u;i<=n;i++)
dfs(i+1,n,k);
同时记得做回溯 并且使用bool数组保证不去重复的。
完整代码 C++ ACcode
vector<vector<int> > res; vector<int> path; bool st[20] = {false}; void dfs(int u,int n,int k){ if(path.size() == k){res.push_back(path);return;} for(int i = u;i<=n;i++){ if(!st[i]){ st[i] = true; path.push_back(i); dfs(i+1,n,k); path.pop_back(); st[i] = false; } } } vector<vector<int> > combine(int n, int k) { dfs(1,n,k); return res; }