题目

image.png

思路

  • 子集基本差不多,关键在于去重,与组合总和 II类似

    代码

    1. public List<List<Integer>> subsetsWithDup(int[] nums) {
    2. List<List<Integer>> res = new ArrayList<>();
    3. Arrays.sort(nums);
    4. dfs(nums, 0, res, new ArrayList<>());
    5. return res;
    6. }
    7. public void dfs(int[] nums, int index, List<List<Integer>> res, List<Integer> list) {
    8. res.add(new ArrayList<>(list));
    9. for (int i = index; i < nums.length; i++) {
    10. //去重
    11. if (i != index && nums[i] == nums[i - 1]) continue;
    12. list.add(nums[i]);
    13. dfs(nums, i + 1, res, list);
    14. list.remove(list.size() - 1);
    15. }
    16. }

    子集 II