通过这一题,总算是对回溯算法有了相对清晰的认识。什么时候递归该回溯,什么时候不该,想明白了其实也没有这么复杂。这里推荐一个视频讲解的特别清晰特别好:点这里。
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;
}
};