90. 子集 II
所与の整数NUMSの配列は、すべての可能なサブセット(パワー設定)の配列を返す、重複する要素を含んでいてもよいです。
説明:ソリューションセットの重複サブセットを含めることはできません。
例:
入力:[1,2,2]
出力
:
[ [2]、
[1]、
[1,2,2]、
[2,2]、
[1,2]、
[]
]
PS:
ソートに、繰り返し要素ことを確実にするために一緒に入れ
lenの左、右端位置に各反復の開始位置を表す新たなシーケンスを生成する各反復のレコード長は、長さを示し
、先行する要素が左を決定するために繰り返しているかどうかに応じてある値、位置を移動します
実際には、1以下のサブセット同じ
class Solution {
public List<List<Integer>> subsetsWithDup(int[] nums) {
List<List<Integer>> retList = new ArrayList<>();
retList.add(new ArrayList<>());
if(nums == null || nums.length == 0) return retList;
Arrays.sort(nums);
List<Integer> tmp = new ArrayList<>();
tmp.add(nums[0]);
retList.add(tmp);
if(nums.length == 1) return retList;
int lastLen = 1;
for(int i = 1; i < nums.length; i++){
int size = retList.size();
if(nums[i] != nums[i-1]){
lastLen = size;
}
for(int j = size - lastLen; j < size; j++){
List<Integer> inner = new ArrayList(retList.get(j));
inner.add(nums[i]);
retList.add(inner);
}
}
return retList;
}
}