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