zoukankan      html  css  js  c++  java
  • 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:
        vector<vector<int> > re;
        vector<vector<int> > permuteUnique(vector<int> &num) {
            map<int , int> m;
            int size = num.size();
            vector <int> result;
            for(int i = 0; i < size ;i++)
            {
                m[num[i]]++;
            }
            per(result,0,0,m,size);
            return re;
            
            
        }
        void per(vector<int> now ,int flag,  int put,map<int , int> m,int size)
        {
            if(flag == 1)
            {
                now.push_back(put);
                m[put]--;
                if(now.size() == size)
                {
                    re.push_back(now);
                    return;
                }
            }
            else flag =1;
            for(map<int ,int>::iterator iter = m.begin();iter !=m.end() ;iter++)
            {
                if(iter->second > 0)
                {
                    per(now ,1, iter->first,m,size);
                }
            }
            
        }
    };
    

      

    用dfs应该会更快。但是用dfs需要先排一下序。 n log n,之后用n^2进行取元素。

    我用map思路相似,但是每次取元素都需要加一个

  • 相关阅读:
    Oracle 单引号与双引号的区别
    oracle 生成随机数
    oracle 表空间及查看所有用户的表空间
    字节和字符的区别
    java io
    Oracle 基础
    gvim 常用键
    Python之struct
    Python之MySQLdb
    Python之sqlite3
  • 原文地址:https://www.cnblogs.com/pengyu2003/p/3620717.html
Copyright © 2011-2022 走看看