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:
    void perm(vector<int> &s, vector<int> &count, vector<int> &tmp,
              vector<vector<int> > &result, int nSize, int pos)
    {
        if (pos < nSize)
        {
            for(int i = 0; i < s.size(); ++i)
            {
                if (count[i] > 0)
                {
                    --count[i];
                    tmp[pos] = s[i];
                    perm(s, count, tmp, result, nSize, pos+1);
                    ++count[i];
                }
            }
        }
        else
        {
            result.push_back(tmp);
        }
    }
    
    vector<vector<int> > permuteUnique(vector<int> &num) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        sort(num.begin(), num.end());
        vector<int> s;  
        vector<int> count;  
        int val = num[0];  
        int c = 1;  
        for (int i = 1; i < num.size(); ++i)  
        {  
            if (num[i] == val)  
            {  
                ++c;  
            }  
            else  
            {  
                s.push_back(val);  
                count.push_back(c);  
                val = num[i];  
                c = 1;  
            }  
        }  
        s.push_back(val);  
        count.push_back(c);
        
        vector<vector<int> >result;
        vector<int> tmp(num.size());
        perm(s, count, tmp, result, num.size(), 0);
        return result;
    }
};


你可能感兴趣的:(c,function,Numbers,Duplicates)