题目的链接在这里:https://leetcode-cn.com/problems/subsets-ii/
题目大意
给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。
一、示意图
二、解题思路
回溯
回溯
代码如下:
class Solution {
List<List<Integer>> res=new LinkedList<>();
List<Integer> temp=new LinkedList<>();
public List<List<Integer>> subsetsWithDup(int[] nums) {
//也就是包含重复元素 然后选择 感觉就是多了一个筛选的过程
//把原数组做了一个排序操作 也是问题的关键
//为什么排序之前会出问题呢
/**
* 主要是会存在 441和414这种情况 以及 41和14这种情况
*/
Arrays.sort(nums);
if(nums.length==0){
res.add(new LinkedList<>());
return res;
}
backTrance(nums,0);
return res;
}
private void backTrance(int[] nums, int start) {
//先进行包含判断
if(!res.contains(temp)){
res.add(new LinkedList<>(temp));
}
//然后开始判断
for(int i=start;i<nums.length;i++){
temp.add(nums[i]);
backTrance(nums,i+1);
temp.remove(temp.size()-1);
}
}
}