这个题目和组合求和差不多,也使用的深度优先遍历(回溯算法),回溯的意思就是,每次往深处遍历以后,再次返回到上一层。
在这个题目里,需要有一个visited数组作记录,记录下来被访问的结点,被访问后就不能再访问了
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
//使用深度遍历的方法,给结点做标记,用过的标记为1
int len=nums.size();
int begin=0;
vector<int> visited(len,0);
vector<int> path;
vector<vector<int>> res;
if(len==0){
return res;
}
dfs(nums,len,visited,begin,path,res);
return res;
}
void dfs(vector<int>& nums,int len,vector<int> visited,int begin,vector<int> path,vector<vector<int>>& res){
if(begin==len){//深度等于数组长度就返回路径
res.push_back(path);
return;
}
for(int i=0;i<len;i++){
if(visited[i]!=0){
continue;
}
path.push_back(nums[i]);
visited[i]=1;
dfs(nums,len,visited,begin+1,path,res);
path.pop_back();
visited[i]=0;
}
}
};