Given a collection of integers that might contain duplicates, nums, return all possible subsets (the power set).
Note: The solution set must not contain duplicate subsets.
Example:
Input: [1,2,2] Output: [ [2], [1], [1,2,2], [2,2], [1,2], [] ]
题解如下:
class Solution {
public List<List<Integer>> subsetsWithDup(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
if(nums == null || nums.length <= 0) {
return res;
}
List<Integer> temp = new ArrayList<>();
Arrays.sort(nums);
backtrack(res,temp,nums,0);
return res;
}
public void backtrack(List<List<Integer>> res,List<Integer> temp,int[] nums,int idx) {
res.add(new ArrayList<>(temp));
if(idx == nums.length) {
return;
}
for(int i = idx;i < nums.length;i++) {
if(i > idx && nums[i] == nums[i-1])
continue;//略过重复元素
temp.add(nums[i]);
backtrack(res,temp,nums,i+1);
temp.remove(temp.size()-1);
}
}
}

本文介绍了一种解决含有重复元素的整数集合所有可能子集(幂集)的问题的方法。通过递归回溯算法,结合排序和跳过重复元素的策略,确保了结果中不包含重复的子集。

208

被折叠的 条评论
为什么被折叠?



