サブセット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 if(nums == 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 for(int 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 }