题目描述:
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],
[]
]
解题思路:
- 枚举问题一般都是用递归的方法来求解,这题也不例外
- 注意题目中不能出现重复的情况,这一点值得关注
代码如下:
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
public ArrayList<ArrayList<Integer>> subsetsWithDup(int[] num) {
if(num == null || num.length == 0)
return res;
ArrayList<Integer> list = new ArrayList<>();
Arrays.sort(num);
recusion(num,0,list);
return res;
}
private void recusion(int [] num, int start, ArrayList<Integer> list){
res.add(new ArrayList<>(list));
for(int i = start; i < num.length; i++){
if(i > start && num[i] == num[i -1])
continue;
list.add(num[i]);
recusion(num,i + 1,list);
list.remove(list.size() - 1);
}
}