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].
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 |
public class Solution { public
ArrayList<ArrayList<Integer>> permuteUnique(int[] num) { ArrayList<ArrayList<Integer> > result = new
ArrayList<ArrayList<Integer>>(); ArrayList<Integer> aList = new
ArrayList<Integer>(); int
len = num.length; if(len > 0){ for(int
i = 0; i < len; ++i) aList.add(num[i]); result.add(aList); for(int
i = 0; i < len - 1; ++i){ ArrayList<ArrayList<Integer> > temp = new
ArrayList<ArrayList<Integer>>(); while(!result.isEmpty()){ HashSet<Integer> multi = new
HashSet<Integer>(); ArrayList<Integer> li = result.remove(0); for(int
j = i; j < len; ++j){ if(!multi.contains(li.get(j))){ ArrayList<Integer> dul = new
ArrayList<Integer>(); dul.addAll(li); int
ele = dul.remove(j); dul.add(i, ele); multi.add(ele); temp.add(dul); } } } result = temp; } } return
result; }} |
原文:http://www.cnblogs.com/averillzheng/p/3542227.html