leetcode90. 子集 II

1.题目描述:

给你一个整数数组nums,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。返回的解集中,子集可以按任意顺序排列。

leetcode90. 子集 II_第1张图片

2.回溯:

去除横向/树层上的重复元素,详细见leetcode40. 组合总和 II。

class Solution {
    private List> resList = new ArrayList<>();
    List list = new ArrayList<>();
    public List> subsetsWithDup(int[] nums) {
        Arrays.sort(nums);
        backTracking(nums, 0);
        return resList;
    }

    public void backTracking(int[] nums, int index) {
        resList.add(new ArrayList<>(list));
        for (int i = index; i < nums.length; i++) {
            if (i > index && nums[i] == nums[i - 1]) continue;//去重
            list.add(nums[i]);
            backTracking(nums, i + 1);
            list.remove(list.size() - 1);
        }
    }
}

你可能感兴趣的:(回溯算法,leetcode,算法,java,数据结构,回溯)