码迷,mamicode.com
首页 > 其他好文 > 详细

Permutations II <LeetCode>

时间:2014-08-27 01:37:16      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   使用   io   for   ar   div   

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

 

     思路首先按照正常的DFS算法进行计算(先进行快排),当出现一个字符等于前一个数字时,有两种方法可以解决重复 1:当出现该数字等于前一个数字时,如果前一个数字已经被使用,则该数字才可以使用,相当于对相同的数字进行一定的排序,在结果中不管这些元素在哪只能按着该次序出现,因此就避免了重复。  2:第二种方法和第一种方法相反,当出现一个数字和上一个数字相等时,如果前一个数字没有被使用,则该数字才可以使用,这样如果第一个被使用的不是相同数字中的最后一个,就不会产生一个全排列,因为这个数被使用了,它后面一个相同的数字就永远不会被使用,也相当于对相同的数字进行了排序,只不过和方法1是相反的,因此也能避免重复

 

 1 struct  tt
 2 {
 3     int val;
 4     bool aa;
 5     
 6 };
 7 
 8 class Solution {
 9 public:
10     vector<vector<int>> result;
11     vector<tt> temp;
12     vector<vector<int> > permuteUnique(vector<int> &num) {
13         vector<tt>  nu;
14         sort(num.begin(),num.end());
15         for(int i=0;i<num.size();i++)
16         {
17             tt t;
18             t.val=num[i];
19             t.aa=false;
20             nu.push_back(t);
21         }
22         temp.clear();
23         result.clear();
24         getback(nu,0);
25         return result;
26     }
27     
28     void getback(vector<tt> &num,int dep)
29     {
30         if(dep==num.size())
31         {
32             vector<int>  t;
33             for(int i=0;i<dep;i++)
34             {
35                 t.push_back(temp[i].val);
36             }
37             result.push_back(t);
38 
39             return;
40         }
41         else
42         {
43             for(int i=0;i<num.size();i++)
44             {
45                 if(i>0&&num[i].val==num[i-1].val&&num[i].aa==false&&num[i-1].aa==false)   //*出现相同数字时从前面的书记开始使用,  改为num[i-1].aaa==true表示从后边开始使用也可以*/
46                 {
47                     continue;
48                 }
49                 else if(num[i].aa==false)
50                 {
51                   num[i].aa=true;
52                   temp.push_back(num[i]);
53                   getback(num,dep+1);
54                   temp.pop_back();
55                   num[i].aa=false;
56                 }
57             }
58         }
59     }
60 };

 

Permutations II <LeetCode>

标签:style   blog   color   os   使用   io   for   ar   div   

原文地址:http://www.cnblogs.com/sqxw/p/3938509.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!