题解 | #牛棚分组#
牛棚分组
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;
}
查看17道真题和解析