public List<List<Integer>> subsetsWithDup(int[] num) {
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        int number = 1 << num.length;

        Arrays.sort(num);
        for (int i = 0; i < number; i++) {
            List<Integer> list = new ArrayList<Integer>();
            for (int j = 0; j < num.length; j++) {
                if ((i & (1 << j)) > 0) {
                    list.add(num[j]);
                }
            }
            if (!result.contains(list)) {
                result.add(list);
            }
        }
        return result;
    }