求數組的子集(含重複)Subsets II

問題:數組

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

相關文章
相關標籤/搜索