给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: [1,2,2] 输出: [ [2], [1], [1,2,2], [2,2], [1,2], [] ]
package LeetCode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class SubsetsWithDup {
public static List<List<Integer>> res=null;
public List<List<Integer>> subsetsWithDup(int[] nums) {
res=new ArrayList<>();
List<Integer> r=new ArrayList<>();
res.add(new ArrayList<Integer>(r));
if(nums.length<0){
return res;
}
Arrays.sort(nums);
dfs(0,nums,r);
return res;
}
public void dfs(int index, int[] nums, List<Integer> re) {
for (int i = index; i <nums.length ; i++) {
Integer a=nums[i];
re.add(nums[i]);
if(res.contains(re)){
re.remove(a);
continue;
}
res.add(new ArrayList<Integer>(re));
dfs(i+1,nums,re);
re.remove(a);
}
}
public static void main(String[] args){
SubsetsWithDup sub=new SubsetsWithDup();
int[] nums={4,4,4,1,4
};
System.out.println(sub.subsetsWithDup(nums).toString());
}
}
子集生成
本文介绍了一种算法,用于生成包含重复元素的整数数组的所有不重复子集。通过深度优先搜索(DFS)递归实现,确保了解集不包含重复的子集。
&spm=1001.2101.3001.5002&articleId=88837482&d=1&t=3&u=55f70d8646d3400bb04d40d8ce9e3d35)
907

被折叠的 条评论
为什么被折叠?



