46.全排列
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
- 用DFS的思想,问题是防止相同的数字重复进入,解决方法:用一个标志数组,一个数字进入时使标志数组同位置置为1,递归体内循环遇1则跳过。
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
if(nums.size() == 0) return {};
vector<vector<int> > res;
vector<int> tmp;
vector<int> flag(nums.size(),0);
DFS(res,tmp,flag,nums);
return res;
}
void DFS(vector<vector<int> > &res,vector<int> &tmp,vector<int> &flag,vector<int> nums){
if(tmp.size() == nums.size()){
res.push_back(tmp);
}
for(int i = 0;i < nums.size();i++){
if(flag[i] == 1) continue;
flag[i]=1;
tmp.push_back(nums[i]);
DFS(res,tmp,flag,nums);
tmp.pop_back();
flag[i]=0;//不要忘了回溯的时候置回0
}
}
};
通过时间: