Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,
[1,1,2] have the following unique permutations:
[
[1,1,2],
[1,2,1],
[2,1,1]
]
方法:与Permutations I代码一样即可通过
class Solution {
private:
void next(vector<int> & now){
int start = -1;
for(int i = now.size() - 2; i >= 0 ; --i){
if(now[i]<now[i+1]){
start = i;
break;
}
}
if(start ==-1)
sort(now.begin(),now.end());
else{
for(int j = now.size() - 1; j > start ; --j){
if(now[j] > now[start]){
swap(now[j],now[start]);
break;
}
}
reverse(now.begin() + start + 1,now.end());
}
}
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<vector<int>> res;
vector<int> buffer(nums.begin(),nums.end());
res.push_back(buffer);
next(buffer);
while(buffer != nums){
res.push_back(buffer);
next(buffer);
}
return res;
}
};