解题思路
回溯:回溯就是在深度优先搜索的基础上有一个回到上一层结点时需要状态重置
状态:每一个结点表示了解问题的不同阶段
class Solution {
public:
void dfs(vector<int>&nums,vector<vector<int>>&res,vector<int>&combine,vector<bool>&flag,int remain){
if(remain==0){
res.push_back(combine);
return;
}
for(int i=0;i<nums.size();++i){
if(flag[i]==true) continue;
combine.push_back(nums[i]);
flag[i]=true;
remain--;
dfs(nums,res,combine,flag,remain);
combine.pop_back();
flag[i]=false;
remain++;
}
}
vector<vector<int>> permute(vector<int>& nums) {
int n=nums.size();
vector<bool>flag(n,false);
vector<vector<int>>res;
vector<int>combine;
dfs(nums,res,combine,flag,n);
return res;
}
};
|