给定一个数组,数组中的元素有重复项,将其全排列,求出全排列的组合。
Input: [1,1,2]
Output:
[
[1,1,2],
[1,2,1],
[2,1,1]
]
思路:
和46题很相似,但难度比46题更大,如果不使用 set 去重的话,很难做出来。将46题的方法简单去重,再使用set,即可。
class Solution { public: vector<vector<int>> permuteUnique(vector<int>& nums) { set<vector<int>> res; sort(nums.begin(), nums.end()); permuteUniqueDFS(nums, 0, res); return vector<vector<int>>(res.begin(), res.end()); } void permuteUniqueDFS(vector<int>& nums, int start, set<vector<int>>& res) { if (start == (int)nums.size()) { res.insert(nums); return; } for (int i = start; i < (int)nums.size(); i++) { if (i > start && i > 0 && ((nums[i] == nums[i - 1]) || nums[i] == nums[start])) continue; else { swap(nums[i], nums[start]); permuteUniqueDFS(nums, start + 1, res); swap(nums[i], nums[start]); } } } };