[leetcode] Permutations II


Permutations II

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], and [2,1,1].

跟PermutionsI类似,不过需要去重。

思路是先对原数组排序,然后在循环开始时,跳过重复元素。

class Solution {
public:
    vector<vector<int> > permuteUnique(vector<int> &num) {
        vector<vector<int>> re;
        vector<int> thisRe;
        sort(num.begin(), num.end());
        DFS(num, re, thisRe);
        return re;
    }
    void DFS(vector<int> &num, vector<vector<int>> &re, vector<int> &thisRe){
        if(num.size() == 0) {
            re.push_back(thisRe);
            return ;
        }
        int len = num.size();
        int i = 0;
        while(i < len){
            int tmp = num[i];
            thisRe.push_back(tmp);
            num.erase(num.begin() + i);
            DFS(num, re, thisRe);
            num.insert(num.begin() + i, tmp);
            thisRe.pop_back();
            i++;
            while(i < len && num[i] == num[i - 1]) i++;
        }
    }
};

 

Untitled

Leave a comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.