给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。

    解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。

    分析:本题均为使用之前题目的解题技巧,如用flag来保证没有重复子集,用子集1.0的整体框架等等

    参考代码:
    public List> subsetsWithDup(int[] nums) {
    Arrays.sort(nums);
    boolean[] flag = new boolean[nums.length];
    sup(nums,0,flag);
    return ret;
    }
    List> ret = new ArrayList<>();
    LinkedList path = new LinkedList<>();
    private void sup(int[] nums,int index,boolean[] flag){
    ret.add(new ArrayList<>(path));
    for(int i=index;i if(i>0&&nums[i]==nums[i-1]&&!flag[i-1]) continue;
    flag[i]=true;
    path.add(nums[i]);
    sup(nums,i+1,flag);
    flag[i]=false;
    path.removeLast();
    }
    }