给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: [1,2,2]
输出:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
package chapter02;
//子集Ⅱ
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Test06 {
public static 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;
}
public static void main(String[] args){
int[] nums = {1,2,2};
System.out.println(subsetsWithDup(nums));
}
}