Problem:
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] ]Solution:
class Solution {
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<vector<int>> ans;
if (nums.empty() || nums.size() == 1)
return {nums};
vector<int> num = nums;
num.erase(num.begin());
vector<vector<int>> temp = permuteUnique(num);
for (int i = 0; i < temp.size(); i++){
for (int j = 0; j < nums.size(); j++){
vector<int> p = temp[i];
if (j > 0 && nums[0] == p[j - 1])
continue;
else
p.insert(p.begin() + j, nums[0]);
if (find(ans.begin(), ans.end(), p) == ans.end())
ans.push_back(p);
}
}
return ans;
}
};
本文提供了一个C++解决方案,用于找出包含可能重复数字的集合的所有唯一排列。通过递归方法实现,确保了结果中没有重复的排列。

1万+

被折叠的 条评论
为什么被折叠?



