Permutations II

来源:互联网 发布:做动漫的软件 编辑:程序博客网 时间:2024/05/20 00:35

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

Subscribe to see which companies asked this question

运用set来保证每一级不会有重复的,但完成某一级的时候需要clear

static int m[100];class Solution {public:        void backtrack(vector<int>& nums,int t,vector<set<int>>&lim,vector<vector<int>>&ans, vector<int> temp)    {        if(t==nums.size())        {            ans.push_back(temp);            return ;        }        else        {            for(int i=0;i<nums.size();++i)            {                if(m[i]==0&&lim[t].find(nums[i])==lim[t].end())                {                    m[i]=1;                    {                        temp.push_back(nums[i]);                        lim[t].insert(nums[i]);                        backtrack(nums,t+1,lim,ans,temp);                        temp.pop_back();                        m[i]=0;                    }                 }            }            lim[t].clear();            return ;        }    }    vector<vector<int>> permuteUnique(vector<int>& nums) {        vector<vector<int>> ans;        vector<int> temp;        vector<set<int>> lim(nums.size(),set<int>());        int t=0;        for(int i=0;i<nums.size();++i)        {            if(lim[t].find(nums[i])==lim[t].end())            {                m[i]=1;                temp.push_back(nums[i]);                lim[t].insert(nums[i]);                backtrack(nums,t+1,lim,ans,temp);                temp.pop_back();                m[i]=0;            }        }        lim[t].clear();        return ans;    }};

0 0
原创粉丝点击