問題:數組
Given a collection of integers that might contain duplicates, nums, return all possible subsets.spa
Note: The solution set must not contain duplicate subsets.code
For example,
If nums = [1,2,2]
, a solution is:rem
[ [2], [1], [1,2,2], [2,2], [1,2], [] ]
解決:it
① 輸入數組容許有重複項,其餘條件都不變,代碼只需在原有的基礎上增長一句話,while (nums[i] == nums[i + 1]) i ++; 這句話的做用是跳過樹中爲X的葉節點,由於它們是重複的子集,應被拋棄。io
class Solution { //3ms
public List<List<Integer>> subsetsWithDup(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
if(nums == null || nums.length == 0) return res;
List<Integer> list = new ArrayList<>();
Arrays.sort(nums);
dfs(nums,0,list,res);
return res;
}
public void dfs(int[] nums,int i,List<Integer> list,List<List<Integer>> res){
res.add(new ArrayList<Integer>(list));
for (int j = i;j < nums.length ;j ++ ) {
if(j > i && nums[j] == nums[j - 1]) continue;
list.add(nums[j]);
dfs(nums,j + 1,list,res);
list.remove(list.size() - 1);
}
}
}class