题目
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一样,唯一区别就是,加入了去重操作,构建了set容器
代码
class Solution {
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
if (nums.empty()) return vector<vector<int> >(1, vector<int>());
set<vector<int> > res;
vector<vector<int>> result;
int first = nums[0];
nums.erase(nums.begin());
vector<vector<int> > words = permuteUnique(nums);
for (auto &a : words) {
for (int i = 0; i <= a.size(); ++i) {
a.insert(a.begin() + i, first);
res.insert(a);
a.erase(a.begin() + i);
}
}
set<vector<int>>::iterator itr=res.begin();
for(;itr!=res.end();itr++)
result.push_back(*itr);
return result;
}
};