2020-07-25
1.题目描述
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
2.题解
交换元素
3.代码
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
int len=nums.size();
if (!len) return vector<vector<int>>(0);
dfs(nums,0,len);
return res;
}
void dfs(vector<int> nums, int step,int len){
if (step==len){
res.push_back(nums);
return;
}
for (int i=step;i<len;i++){
swap(nums[i],nums[step]);
dfs(nums,step+1,len);
swap(nums[i],nums[step]);
}
}
vector<vector<int>> res;
};
class Solution {
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
int len=nums.size();
if (!len) return vector<vector<int>>(0);
dfs(0,len,nums);
return res;
}
void dfs(int step,int len,vector<int>& nums){
if (step==len){
res.push_back(nums);
return ;
}
for (int i=step;i<len;i++){
bool f=true;
for (int j=i+1;j<len;j++){
if (nums[j]==nums[i]){
f=false;
break;
}
}
if (i==step||(nums[i]!=nums[step]&&f)){
swap(nums[i],nums[step]);
dfs(step+1,len,nums);
swap(nums[i],nums[step]);
}
}
}
vector<vector<int>> res;
};