含有相同元素求子集
For example,If nums = [1,2,2], a solution is:[ [2], [1], [1,2,2], [2,2], [1,2], []]
题目描述:
给定一个集合,集合中有重复元素,返回其所有的不重复子集。
思路分析:
求集合的子集,用回溯法进行解决。由于有重复元素,那么我们先对集合进行排序,然后添加元素的时候,查看是否和前一个元素相同,如果相同并且前一个元素还没有被访问,那么就跳过。
代码:
class Solution { public List
>subsetsWithDup(int []nums){ List
>res=new ArrayList<>(); List list=new ArrayList<>(); if(nums==null||nums.length==0) return res; Arrays.sort(nums); //排序 boolean []visited=new boolean[nums.length]; for(int size=0;size<=nums.length;size++){ backtracking(0,size,nums,visited,res,list); } return res;}public void backtracking(int start,int size,int[]nums,boolean[]visited,List
>res,List list){ if(list.size()==size){ res.add(new ArrayList<>(list)); return; } for(int i=start;i