File tree Expand file tree Collapse file tree 1 file changed +13
-17
lines changed Expand file tree Collapse file tree 1 file changed +13
-17
lines changed Original file line number Diff line number Diff line change 1
-
2
-
3
1
import java .util .ArrayList ;
4
2
import java .util .Arrays ;
5
3
18
16
19
17
public class SubsetsII {
20
18
public ArrayList <ArrayList <Integer >> subsetsWithDup (int [] num ) {
19
+ ArrayList <ArrayList <Integer >> ret = new ArrayList <ArrayList <Integer >>();
20
+ ArrayList <ArrayList <Integer >> lastLevel = null ;
21
+ ret .add (new ArrayList <Integer >());
21
22
Arrays .sort (num );
22
- ArrayList <ArrayList <Integer >> result = new ArrayList <ArrayList <Integer >>();
23
- ArrayList <Integer > path = new ArrayList <Integer >();
24
- subsets (num , 0 , path , result );
25
- return result ;
26
- }
27
-
28
- private void subsets (int [] num , int begin , ArrayList <Integer > path ,
29
- ArrayList <ArrayList <Integer >> result ) {
30
- result .add (new ArrayList <Integer >(path ));
31
- for (int i = begin ; i < num .length ; i ++) {
32
- if (i > begin && num [i - 1 ] == num [i ]) {
33
- continue ;
23
+ for (int i = 0 ; i < num .length ; i ++) {
24
+ ArrayList <ArrayList <Integer >> tmp = new ArrayList <ArrayList <Integer >>();
25
+ ArrayList <ArrayList <Integer >> prev = i == 0 || num [i ] != num [i - 1 ] ? ret : lastLevel ;
26
+ for (ArrayList <Integer > s : prev ) {
27
+ ArrayList <Integer > newSet = new ArrayList <Integer >(s );
28
+ newSet .add (num [i ]);
29
+ tmp .add (newSet );
34
30
}
35
- path .add (num [i ]);
36
- subsets (num , i + 1 , path , result );
37
- path .remove (path .size () - 1 );
31
+ ret .addAll (tmp );
32
+ lastLevel = tmp ;
38
33
}
34
+ return ret ;
39
35
}
40
36
}
You can’t perform that action at this time.
0 commit comments