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]
]
递归的思路很清晰,速度慢了很多
class Solution {
public:
set<vector<int>> res;
void Func(vector<int>& nums1, int idx){
if(idx == nums1.size())
res.insert(nums1);
else {
for(int i = idx; i < nums1.size(); ++i){
swap(nums1[i], nums1[idx]);
Func(nums1, idx + 1);
swap(nums1[i], nums1[idx]);
}
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
if(nums.size() == 0)
return vector<vector<int>>();
Func(nums, 0);
return vector<vector<int>>(res.begin(), res.end());
}
};