Leetcode 90. Subsets II 子集 II

题目:

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

说明:解集不能包含重复的子集。

示例:

输入: [1,2,2]
输出:
[
  [2],
  [1],
  [1,2,2],
  [2,2],
  [1,2],
  []
]

解题思路:

回溯法求解组合问题,求解方式都差不多。

代码实现:

class Solution {
    public List<List<Integer>> subsetsWithDup(int[] nums) {
        List<List<Integer>> result = new LinkedList<List<Integer>>();
        Arrays.sort(nums);
        List<Integer> list = new LinkedList<Integer>();
        dfs(nums, result, list, 0);
        return result;
    }

    private void dfs(int[] nums, List<List<Integer>> result, List<Integer> list, int start) {
        result.add(new LinkedList<Integer>(list));
        for (int i = start; i < nums.length; i ++) {
            if (i > start && nums[i - 1] == nums[i]) continue;
            list.add(nums[i]);
            dfs(nums, result, list, i + 1);
            list.remove(list.size() - 1);
        }
    }
}

你可能感兴趣的:(Leetcode,(1~100),leetcode,java)