[LeetCode] 90.サブセットII

サブセットII。質問の意味は78質問とほとんど同じです。唯一の追加条件は、入力に重複する要素があることですが、同じサブセットを繰り返し出力しないでください。例、

例:

入力:[1,2,2] 
出力:
[ 
  [2]、
  [1]、
  [1,2,2]、
  [2,2]、
  [1,2]、
  [] 
]

アイデアは戻って78問のテンプレートを適用することです。この質問は入力をソートする必要があることに注意してくださいヘルパー関数では、同じ要素をスキップする必要があります。

時間O(nlogn)-ソートされた入力+ O(2 ^ n)= O(2 ^ n)のため

スペースO(n)

Java実装

1  クラスソリューション{
 2      public List <List <Integer >> subsystemsWithDup(int [] nums ){
 3          List <List <Integer >> res = new ArrayList <> ();
4          // コーナーケース
5          ifnums == null || nums.length == 0 ){
 6              return res;
7          }
 8          Arrays.sort(nums);
9          helper(res、new ArrayList <>()、nums、0 );
10          リターン解像度;
11      }
 12  
13     private  void helper(List <List <Integer >> res、List <Integer> list、int []          nums int start){
 14 res.add(new ArrayList <> (list));
15          forint i = start; i <nums.length; i ++ ){
 16              if(i!= start && nums [i] == nums [i-1 ])
 17                  続行;
18              list.add(nums [i]);
19              ヘルパー(res、list、nums、i + 1 );
20              list.remove(list.size()-1 );
21          }
 22      }
23 }

 

おすすめ

転載: www.cnblogs.com/aaronliu1991/p/12710043.html