1. 程式人生 > >leetcode90. 子集 II

leetcode90. 子集 II

題目

給定一個可能包含重複元素的整數陣列 nums,返回該陣列所有可能的子集(冪集)。

說明:解集不能包含重複的子集。

示例:

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

解題

  • 遞迴 + 回溯
  • 先排序
  • 注意重複元素剔除
  • 空集也是一個子集
class Solution {
    List<List<Integer>> result = new ArrayList<>();
    public List<
List<Integer>> subsetsWithDup(int[] nums) { if (nums == null) { return result; } // 排序 Arrays.sort(nums); findSubset(nums, 0, new ArrayList<>()); // 空集也是一個子集 result.add(new ArrayList<>()); return result; }
private void findSubset(int[] nums, int index, List<Integer> temp){ for (int i = index; i < nums.length; i++){ // 去除重複元素 if (i > index && nums[i] == nums[i - 1]) { continue; } temp.add(nums[i]); result.
add(new ArrayList<>(temp)); findSubset(nums, i + 1, temp); // 回溯 temp.remove(temp.size() - 1); } } }