leetcode90. 子集 II
阿新 • • 發佈:2018-12-31
題目
給定一個可能包含重複元素的整數陣列 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);
}
}
}