zoukankan      html  css  js  c++  java
  • 第90题:子集II

    一. 问题描述

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

    说明:解集不能包含重复的子集。

    示例:

    输入: [1,2,2]

    输出:

    [

      [2],

      [1],

      [1,2,2],

      [2,2],

      [1,2],

      []

    ]

    二. 解题思路

    本题思路:采用回溯算法进行求解,构建递归函数(全局变量列表data存储子集,局部变量list存储当前某一个具体子集,n表示添加的位数,nums全局数组)

    步骤一:将数组nums从小到大进行排序。

    步骤二:构建递归函数,判断list对象是否已经存在于data中,如果不存在则添加,则否跳过。

    步骤三:根据n的位置继续添加未加入到list的数字,并且返回步骤二进行递归。

    步骤四:得到data列表,返回data。

    三. 执行结果

    执行用时 :17 ms, 在所有 java 提交中击败了9.14%的用户

    内存消耗 :36.6 MB, 在所有 java 提交中击败了94.59%的用户

    四. Java代码

    class Solution {
        public List<List<Integer>> subsetsWithDup(int[] nums) {
           Arrays.sort(nums);
            List<List<Integer>> data=new ArrayList<List<Integer>>();
            List<Integer> list=new ArrayList<Integer>();
            sw(data,list,0,nums);
               return data;
        }
        
        
        public void sw(List<List<Integer>> data,List<Integer> list,int n,int[] nums)
        {
            if(!data.contains(list))
            {
                data.add(list);
            }
            for(int i=n;i<nums.length;i++)
            {
                List<Integer> alist=new ArrayList<Integer>(list);
                
                alist.add(nums[i]);
                sw(data,alist,i+1,nums);
            }
        }
    }
  • 相关阅读:
    命令安装mongod作为服务启动
    npm命令
    win服务
    win进程操作
    【数据结构与算法之美】7.排序算法之冒泡、选择、插入
    【leetcode】23.合并K个排序链表
    【leetcode】141.环形链表
    【数据结构与算法之美】6.环形队列
    【数据结构与算法之美】5.基于链表实现队列
    【数据结构与算法之美】4.基于数组实现队列
  • 原文地址:https://www.cnblogs.com/xiaobaidashu/p/11751081.html
Copyright © 2011-2022 走看看