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

【leetcode刷题笔记】Permutations II

时间:2014-07-22 22:32:33      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   

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


 

题解:跟Permutation差不多,只是这次会有重复的元素,如下图所示,如果只用DFS的话就会产生重复的排列:

bubuko.com,布布扣

上图中括号内的数字代表这个1是序列中第几个1。上述DFS产生了两个112,121和211。我们可以把两个112写成:1(1) 1(2) 2和1(2) 1(1) 2,可以看到,产生重复的原因是我们其实并不区分当前的1是序列中的第几个1,所以如果我们可以保证序列中相同的元素只按照在序列中序号递增的顺序出现,就可以避免重复了。比如上述的112,我们只允许1(1) 1(2) 2这种情况,而步允许1(2) 1(1) 2这种情况出现。

只需要在判断的时候加上如下所示高亮部分的代码就可以做到这一点:

 1 public class Solution {
 2     public List<List<Integer>> permuteUnique(int[] num) {
 3         List<List<Integer>> answerList = new ArrayList<List<Integer>>();
 4         ArrayList<Integer> currentList = new ArrayList<Integer>();
 5         boolean[] visited = new boolean[num.length];
 6         
 7         Arrays.sort(num);
 8         DS(answerList, visited, num, currentList);        
 9         return answerList;
10     }
11     
12     public void DS(List<List<Integer>> answerList,boolean[] visited,int[] num,ArrayList<Integer> currentList){
13         boolean find = true;
14         for(int i = 0;i < num.length;i++){
15             if(i-1>=0 && num[i]== num[i-1] && visited[i-1] == false)
16                 continue;
17             if(!visited[i]){
18                 currentList.add(num[i]);
19                 visited[i]= true;
20                 DS(answerList, visited, num, currentList);
21                 visited[i]= false;
22                 currentList.remove(currentList.size()-1);
23                 find = false;
24             }
25         }
26         if(find){
27             ArrayList <Integer> temp = new ArrayList<Integer>(currentList);
28             answerList.add(temp);
29         }
30     }
31 }

【leetcode刷题笔记】Permutations II,布布扣,bubuko.com

【leetcode刷题笔记】Permutations II

标签:style   blog   http   color   os   io   

原文地址:http://www.cnblogs.com/sunshineatnoon/p/3860981.html

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