[leetcode] Permutations II

来源:互联网 发布:fcitx输入法 linux 编辑:程序博客网 时间:2024/05/17 22:59

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

思路:先对num排序,然后递归,跳过重复元素

代码:

class Solution {private:    int n;    vector<bool> flag;    vector<vector<int> > res;public:    vector<vector<int> > permuteUnique(vector<int> &num) {        n=num.size();        res.clear();        flag.resize(n,false);        if(n==0) return res;        vector<int> temp(n,0);        sort(num.begin(),num.end());        dfs(temp,num,0);        return res;    }    void dfs(vector<int> temp, vector<int> &num, int step){        if(step==n){            res.push_back(temp);            return;        }        for(int i=0;i<n;i++){            if(flag[i]==false){                temp[step]=num[i];                flag[i]=true;                dfs(temp,num,step+1);                flag[i]=false;                while(i<n-1 && num[i+1]==num[i]) i++;            }        }    }};


0 0