美文网首页
78.& 90. Subsets I & II

78.& 90. Subsets I & II

作者: Super_Alan | 来源:发表于2018-05-09 13:40 被阅读0次

    Given a set of distinct integers, nums, return all possible subsets (the power set).

    Note: The solution set must not contain duplicate subsets.

    Example:

    Input: nums = [1,2,3]
    Output:
    [
      [3],
      [1],
      [2],
      [1,2,3],
      [1,3],
      [2,3],
      [1,2],
      []
    ]
    

    代码:

    public List<List<Integer>> subsets(int[] nums) {
        if (nums == null) {
            return null;
        }
        List<List<Integer>> res = new ArrayList<>();
        ArrayList<Integer> emptyList = new ArrayList<>();
        res.add(emptyList);
    
        for(int i = 0; i < nums.length; i++) {
            int size = res.size();
            for(int j = 0; j < size; j++) {
                ArrayList<Integer> newList = new ArrayList<Integer>(res.get(j));
                newList.add(nums[i]);
                res.add(newList);
            }
        }
    
        return res;
    }
    

    Follow Up: 90. Subsets II

    Given a collection of integers that might contain duplicates, nums, return all possible subsets (the power set).

    Note: The solution set must not contain duplicate subsets.

    Example:

    Input: [1,2,2]
    Output:
    [
      [2],
      [1],
      [1,2,2],
      [2,2],
      [1,2],
      []
    ]
    

    Solution:

    public List<List<Integer>> subsetsWithDup(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        if (nums == null) {
            return res;
        }
        Arrays.sort(nums);
        ArrayList<Integer> emptyList = new ArrayList<>();
        res.add(emptyList);
    
        int sameCount = 1;
        for(int i = 0; i < nums.length; i++) {
            if (i > 0 && nums[i] == nums[i - 1]) {
                sameCount++;
            } else {
                sameCount = 1;
            }
    
            int size = res.size();
            int start = size - size / sameCount;
            for (int j = start; j < size; j++) {
                ArrayList<Integer> newList = new ArrayList<Integer>(res.get(j));
                newList.add(nums[i]);
                res.add(newList);
            }
        }
    
        return res;
    }
    

    相关文章

      网友评论

          本文标题:78.& 90. Subsets I & II

          本文链接:https://www.haomeiwen.com/subject/ylvnrftx.html