用visited
//暂时是组合的用visited数组,排序的用了set
class Solution {
List<List<Integer>> data =new ArrayList<>();
List<Integer> temp=new ArrayList<>();
public List<List<Integer>> subsetsWithDup(int[] nums) {
boolean[] visited=new boolean[nums.length];
Arrays.sort(nums);
subfunc(nums,0,visited);
return data;
}
void subfunc (int[] nums,int startindex,boolean[] visited){
data.add(new ArrayList<>(temp));
for(int i=startindex;i<nums.length;i++){
if(i>0&&!visited[i-1]&&nums[i]==nums[i-1]){
continue;
}
temp.add(nums[i]);
visited[i]=true;
subfunc(nums,i+1,visited);
visited[i]=false;
temp.remove(temp.size()-1);
}
return ;
}
}