47. Permutations II

来源:互联网 发布:小型商城源码 编辑:程序博客网 时间:2024/05/22 09:02

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


class Solution {public:void recursion(vector<int> num, int i, vector<vector<int> > &res) {if (i == num.size()) {res.push_back(num);return;}for (int k = i; k < num.size(); k++) {if (i != k && num[i] == num[k]) continue;//i,k?????swap(num[i], num[k]);//一次recursion(num, i + 1, res);}}vector<vector<int> > permuteUnique(vector<int> &num) {sort(num.begin(), num.end());//vector<vector<int> >res;recursion(num, 0, res);return res;}};


或者跟上一题保持一致的形式,这个更容易记


class Solution {public:   void dfs(set<vector<int> > &result, vector<int> &num, int start)    {        if(start == num.size())         {            result.insert(num);            return;        }        for(int i = start; i < num.size(); i++)        {            if(i != start && num[i] == num[i-1]) continue;            std::swap(num[i], num[start]);            dfs(result, num, start+1);//start+1注意            std::swap(num[i], num[start]);        }    }    vector<vector<int> > permuteUnique(vector<int> &num)    {        set<vector<int> > result;        std::sort(num.begin(), num.end());        dfs(result, num, 0);        return vector<vector<int>>(result.begin(), result.end());    }};


0 0