
通过这一题,总算是对回溯算法有了相对清晰的认识。什么时候递归该回溯,什么时候不该,想明白了其实也没有这么复杂。这里推荐一个视频讲解的特别清晰特别好:点这里。
class Solution {
public:
vector<vector<int>> outs;
vector<bool> used;
void funt(vector<int>& nums, int index, vector<int> out, vector<bool> &con)
{
if(index == nums.size()){
outs.push_back(out);
return;
}
for(int i=0;i<nums.size();i++){
if(!con[i]){
out.push_back(nums[i]);
con[i]=true;
funt(nums, index+1, out, con);
out.pop_back();
con[i]=false;
}
}
return;
}
vector<vector<int>> permute(vector<int>& nums) {
if(nums.size()==0)
return outs;
used = vector<bool>(nums.size(),false);
vector<int> out;
funt(nums, 0, out, used);
return outs;
}
};
本文通过一道编程题目,详细解析了回溯算法的工作原理及应用。作者分享了对何时使用递归回溯的理解,并推荐了一个讲解清晰的视频资源。文章包含了一个C++实现的示例代码,展示了如何通过回溯算法生成所有可能的排列。
941

被折叠的 条评论
为什么被折叠?



