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-
31import java .util .ArrayList ;
42import java .util .Arrays ;
53
1816
1917public class SubsetsII {
2018 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 >());
2122 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 );
3430 }
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 ;
3833 }
34+ return ret ;
3935 }
4036}
You can’t perform that action at this time.
0 commit comments