class Solution {
public:
void dfs(vector<vector<int> > &res, int pos, vector<int> &num) {
if (pos==num.size()-1) {
res.push_back(num);
}
for (int i=pos; i<num.size(); i++) {
int temp=num[pos];
num[pos]=num[i];
num[i]=temp;
dfs(res,pos+1,num);
num[i]=num[pos];
num[pos]=temp;
}
}
vector<vector<int> > permute(vector<int> &num) {
vector<vector<int> > res;
if (num.size()==0) return res;
dfs (res, 0, num);
return res;
}
};
II:
class Solution {
public:
bool isSame(int pos, int cur, vector<int> &num) {
for (int i=pos; i<cur; i++) {
if (num[i]==num[cur]) return true;
}
return false;
}
void dfs(vector<vector<int> > &res, int pos, vector<int> &num) {
if (pos==num.size()-1) res.push_back(num);
for (int i=pos; i<num.size(); i++) {
if (!isSame(pos, i, num)) {
int temp=num[pos];
num[pos]=num[i];
num[i]=temp;
dfs(res,pos+1,num);
num[i]=num[pos];
num[pos]=temp;
}
}
}
vector<vector<int> > permuteUnique(vector<int> &num) {
vector<vector<int> > res;
if (num.size()==0) return res;
dfs(res,0,num);
return res;
}
};