• leetcode Permutations II 无重全排列


    作者:jostree  转载请注明出处 http://www.cnblogs.com/jostree/p/4051169.html

    题目链接:leetcode Permutations II 无重全排列

    题目要求对有重复的数组进行无重全排列。为了保证不重复,类似于全排列算法使用dfs,将第一个数字与后面第一次出现的数字交换即可。例如对于序列1,1,2,2

    有如下过程:

    1,1,2,2 -> 1,1,2,2 -> 1,1,2,2 -> 1,1,2,2

               -> 1,2,1,2 -> 1,2,1,2

                    -> 1,2,2,1

        -> 2,1,1,2 -> 2,1,1,2 -> 2,1,1,2

                    -> 2,1,2,1

               -> 2,2,1,1 -> 2,2,1,1

    代码中使用set来记录数字是否在前面出现过,如果出现过,则不与第一个数字进行交换。

    代码如下:

     1 class Solution {
     2 public:
     3 void swap(int &a, int &b)
     4 {
     5     int tmp = a;
     6     a = b;
     7     b = tmp;
     8 }
     9 void p(vector<int> &num, vector<vector<int> > &res, int begin) 
    10 {
    11     if( begin == num.size() )
    12     {
    13         vector<int> tmp;
    14         for( int i = 0 ; i < num.size() ; i++ )
    15         {
    16             tmp.push_back(num[i]);
    17         }
    18         res.push_back(tmp);
    19     }
    20     else
    21     {
    22         set<int> used;
    23         for( int i = begin ; i < num.size() ; i++ )
    24         {
    25             if(!used.count(num[i]))
    26             {
    27                 used.insert(num[i]);
    28                 swap(num[i], num[begin]);
    29                 p(num, res, begin+1);
    30                 swap(num[i], num[begin]);
    31             }
    32         }
    33     }
    34 }
    35 vector<vector<int> > permuteUnique(vector<int> &num) 
    36 {
    37     vector<vector<int> >res;
    38     if( num.size() == 0 )
    39     {
    40         return res;
    41     }
    42     sort(num.begin(), num.end());
    43     p(num, res, 0);
    44     return res;
    45 }
    46 };
    View Code
  • 相关阅读:
    C++中struct和class的区别
    关于LBP特征等价模式的解释
    常用的颜色模型
    flask类装饰器
    flask的方法视图
    flask standrad class 使用
    flask add_url_rule的使用
    模板的继承
    模板变量设置 set 和 with
    模版include的用法
  • 原文地址:https://www.cnblogs.com/jostree/p/4051277.html
Copyright © 2020-2023  润新知