思路:和一般的排列一样,不过在存入结果时,先检查一下是否已经存在这个结果了。
code:
class Solution {
public:
void solvePermute(vector<int> &num, int pos, vector<vector<int> > &ret){
if(pos == num.size()-1){
if(find(ret.begin(),ret.end(),num) == ret.end())
ret.push_back(num);
return;
}
//solvePermute(num,pos+1,ret);
for(int i = pos;i< num.size();i++){
if(i != pos && num[i] == num[i-1])
continue;
vector<int> temp = num;
int s = temp[pos];
temp[pos] = temp[i];
temp[i] = s;
solvePermute(temp,pos+1,ret);
}
}
vector<vector<int> > permuteUnique(vector<int> &num) {
sort(num.begin(),num.end());
vector<vector<int> > ret;
vector<int> curRet;
int n = num.size();
solvePermute(num,0,ret);
return ret;
}
};