class Solution {
public:
vector<int>tmp;
vector<vector<int>>ans;
int n,vis[30];
void dfs(vector<int>& a,int pos){
if(pos==n){ans.push_back(tmp);return;}
for(int i=0;i<n;++i){
if(vis[i]) continue;
vis[i]=1,tmp.push_back(a[i]);
dfs(a,pos+1);
tmp.pop_back(),vis[i]=0;
}
}
vector<vector<int>> permute(vector<int>& a) {
this->n=a.size();
dfs(a,0);
return ans;
}
};
//数组有重复数字,用以下代码
class Solution {
public:
map<int,int>vis;
vector<vector<int>>ans;
vector<int>tmp;
void dfs(vector<int>&a,int pos){
int n=a.size();
if(pos==n){ans.push_back(tmp);return;}
for(int i=0;i<n;++i){
if(vis[i]||i&&a[i]==a[i-1]&&!vis[i-1]) continue;
vis[i]=1,tmp.push_back(a[i]);
dfs(a,pos+1);
vis[i]=0,tmp.pop_back();
}
}
vector<vector<int>> permute(vector<int>& a) {
dfs(a,0);
return ans;
}
};