首页 > 代码库 > 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].

vector<vector<int> >& permute(vector<int> vecInt){    vector<int> vecWorker;    vector<vector<int> > vecPermu;    vector<int> vecVisit(vecInt.size());    sort(vecInt.begin(), vecInt.end());        helper(vecPermu, vecWorker, vecInt, vecVisit);    return vecPermu;}void helper(vector<vector<int> >& vecPermu, vector<int>& vecWorker, const vector<int>& vecInt, vector<int>& vecVisit){    if (vecWorker.size() == vecInt.size())    {        vecPermu.push_back(vecWorker);        return;    }    for (int i = 0; i < vecInt.size(); i++)    {        if (vecVisit[i] == 1 || (i != 0 && vecInt[i] == vecInt[i-1] && vecVisit[i-1] == 0))        {            continue;        }        vecVisit[i] = 1;        vecWorker.push_back(vecInt[i];        helper(vecPermu, vecWorker, vecInt);        vecWorker.pop_back(vecInt[i]);        vecVisit[i] = 0;    }}

 

Permutations II