看了这个题解,把java翻译成了c++。回溯法本质上就是DFS。
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> re;
int len=nums.size();
if(len==0) return re;
bool used[len];
int i;
for(i=0;i<len;++i)
used[i]=0;
vector<int> path;
dfs(nums,len,0,path,used,re);
return re;
}
void dfs(vector<int> &nums,int len,int depth,vector<int> &path,bool used[],vector<vector<int>> &re){
if(depth==len){
re.push_back(path); //push_back就是拷贝一份加进去
return;
}
int i;
for(i=0;i<len;++i){
if(!used[i]){
path.push_back(nums[i]);
used[i]=1;
dfs(nums,len,depth+1,path,used,re);
used[i]=0;
path.pop_back();
}
}
}
};