题目:
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
示例:
输入: [1,2,2]
输出:[[2],[1],[1,2,2],[2,2],[1,2],[]]
代码:
public class Test31 {
public List<List<Integer>> subsetsWithDup(int[] nums){
Arrays.sort(nums);
List<List<Integer>> result = new ArrayList<>();
List<Integer> temp = new ArrayList<>();
result.add(temp);
function(result,temp,0,nums);
return result;
}
public void function(List<List<Integer>> result,List<Integer> temp,int start,int[] nums){
if (start==nums.length-1) {
List<Integer> temp1 = new ArrayList<>();
temp1.addAll(temp);
temp1.add(nums[start]);
result.add(temp1);
return;
}
for (int i = start; i <=nums.length-1; i++) {
if (i!=0 && nums[i]==nums[i-1] && i!=start) {
continue;
}
List<Integer> temp2 = new ArrayList<>();
temp2.addAll(temp);
temp2.add(nums[i]);
result.add(temp2);
function(result,temp2,i+1,nums);
}
}
}