[leetcode] 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].

class Solution {
public:
    vector<vector<int> > permute(vector<int> &num) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        set<vector<int> >ret;
        int n=num.size();
        _permute(num,n,n-1,ret);
        return vector<vector<int> >(ret.begin(),ret.end());
    }
    void _permute(vector<int>& array,int n,int depth,vector<vector<int> >&ret){
        if(depth==0){
            ret.insert(array);
            return;
        }
        for(int i=0 ; i<=depth ; i++){
            swap(array[i],array[depth]);
            _permute(array,n,depth-1,ret);
            swap(array[i],array[depth]);
        }
        return;        
    }
};


你可能感兴趣的:([leetcode] Permutations II)