class Solution {
    public List<List<Integer>> subsetsWithDup(int[] nums) {
        List<List<Integer>> result = new ArrayList<>();
        result.add(new ArrayList<>());
        Arrays.sort(nums);
        
        int count = 0;
        for (int i = 0; i < nums.length; i += count) {
            count = 0;
            while (count + i < nums.length && nums[count + i] == nums[i]) {
                count++;
            }
            int prevSize = result.size();
            for (int j = 0; j < prevSize; j++) {
                List<Integer> newRow = new ArrayList<>(result.get(j));
                for (int k = 0; k < count; k++) {
                    newRow.add(nums[i]);
                    result.add(new ArrayList<>(newRow));
                }
            }
        }
        return result;
    }
}

 

posted on 2017-08-28 13:00  keepshuatishuati  阅读(94)  评论(0编辑  收藏  举报