public class Solution {
public List<List<Integer>> subsetsWithDup(int[] num) {
List<List<Integer>> result = new ArrayList<>();
List<Integer> path = new ArrayList<>();
Arrays.sort(num);
subsetsWithDupHelper(num, result, path, 0);
return result;
}
private void subsetsWithDupHelper(int[] num, List<List<Integer>> result, List<Integer> path, int index){
if(index == num.length){
List<Integer> li = new ArrayList<Integer>(path);
if(!result.contains(li))
result.add(li);
return;
}
subsetsWithDupHelper(num, result, path, index+1);
path.add(num[index]);
subsetsWithDupHelper(num, result, path, index+1);
path.remove(path.size()-1);
}
}
解析:这道题目跟上道类似,不同点就是集合中可能有相同元素,结果集不可以重复。 深搜去除重复的
Given a collection of integers that might contain duplicates, S, return all possible subsets.
Note:
- Elements in a subset must be in non-descending order.
- The solution set must not contain duplicate subsets.
For example,
If S = [1,2,2]
, a solution is:
[ [2], [1], [1,2,2], [2,2], [1,2], [] ]