47.Permutations II

给定一个数组,数组中的元素有重复项,将其全排列,求出全排列的组合。

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]);
            }
        }
    }
};

 

上一篇:47. Permutations II


下一篇:《自拍教程47》Python_adb重启设备100次