zoukankan      html  css  js  c++  java
  • lettcode 90 子集II

    package com.example.lettcode.dailyexercises;
    
    import java.util.*;
    
    /**
     * @Class SubsetsWithDup
     * @Description 90 子集II 
     * 给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。
     * 解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。
     * <p>
     * 示例 1:
     * 输入:nums = [1,2,2]
     * 输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]
     * <p>
     * 示例 2:
     * 输入:nums = [0]
     * 输出:[[],[0]]
     * @Author
     * @Date 2021/3/31
     **/
    public class SubsetsWithDup {
        /**
         * 方法1:回溯算法
         * 和子集I不同的是,子集II可能出现重复的情况,所以需要去重
         * @param nums
         * @return
         */
        public static List<List<Integer>> subsetsWithDup(int[] nums) {
            if (nums == null || nums.length == 0) return new ArrayList<>();
            // 去重
            Set<List<Integer>> resSet = new HashSet<>();
            resSet.add(new ArrayList<>());
            for (int i = 0; i < nums.length; i++) {
                List<List<Integer>> listList = new ArrayList<>();
                for (List<Integer> integerList : resSet) {
                    // 不能直接在List上修改需要复制一份
                    List<Integer> integers = new ArrayList<>(integerList);
                    integers.add(nums[i]);
                    // 排序去重
                    Collections.sort(integers);
                    listList.add(integers);
                }
                resSet.addAll(listList);
            }
    
            List<List<Integer>> resList = new ArrayList<>();
            for (List<Integer> integers : resSet) {
                resList.add(integers);
            }
            return resList;
        }
    }
    
    // 测试用例
    public static void main(String[] args) {
    	int[] nums = new int[]{1, 2, 2};
    	List<List<Integer>> listList = subsetsWithDup(nums);
    	System.out.print("SubsetsWithDup demo01 result:[");
    	for (List<Integer> integerList : listList) {
    		System.out.print("[");
    		for (Integer integer : integerList) {
    			System.out.print("," + integer);
    		}
    		System.out.print("]");
    	}
    	System.out.println("]");
    
    	nums = new int[]{0};
    	listList = subsetsWithDup(nums);
    	System.out.print("SubsetsWithDup demo02 result:[");
    	for (List<Integer> integerList : listList) {
    		System.out.print("[");
    		for (Integer integer : integerList) {
    			System.out.print("," + integer);
    		}
    		System.out.print("]");
    	}
    	System.out.println("]");
    
    	nums = new int[]{4, 4, 4, 1, 4};
    	listList = subsetsWithDup(nums);
    	System.out.print("SubsetsWithDup demo03 result:[");
    	for (List<Integer> integerList : listList) {
    		System.out.print("[");
    		for (Integer integer : integerList) {
    			System.out.print("," + integer);
    		}
    		System.out.print("]");
    	}
    	System.out.println("]");
    }
    
  • 相关阅读:
    Lua的数学函数
    以KeyValue形式构建Lua Table
    查看占用网速的程序
    JSONObject以及json(转)
    Windows 7 下玩游戏不能全屏
    Windows 7 卸载 IE10
    win7无线网络共享
    打印后台程序服务没有启动,每次打开Powerdesigner都会要我安装打印机
    SQL 条件 判断 select case as
    MyEclipse Web项目调试
  • 原文地址:https://www.cnblogs.com/fyusac/p/14600514.html
Copyright © 2011-2022 走看看