Java教程

90. 子集 II

本文主要是介绍90. 子集 II,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

90. 子集 IIicon-default.png?t=LA23https://leetcode-cn.com/problems/subsets-ii/

难度中等679

给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。

示例 1:

输入:nums = [1,2,2]
输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]

示例 2:

输入:nums = [0]
输出:[[],[0]]

提示:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10

通过次数143,952提交次数227,122

class Solution {
    public List<List<Integer>> subsetsWithDup(int[] nums) {
        List<List<Integer>> ans = new ArrayList<List<Integer>>();
        List<Integer> temp = new ArrayList<Integer>();
        Arrays.sort(nums);
        callback(0,nums,ans,temp);
        return ans;
    }

    void callback(int n,int[] nums,List<List<Integer>> ans,List<Integer> temp)
    {
        if(n == nums.length)
        {
            if(panduan(ans,temp)==false)
                ans.add(new ArrayList<Integer>(temp));
            return;
        }
        temp.add(nums[n]);
        callback(n+1,nums,ans,temp);
        temp.remove(temp.size()-1);
        callback(n+1,nums,ans,temp);
    }

    boolean panduan(List<List<Integer>> ans,List<Integer> temp)
    {
        for(int i=0;i<ans.size();i++)
        {
            if(temp.equals(ans.get(i))==true) return true;
        }
        return false;
    }
}

 

这篇关于90. 子集 II的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!