zoukankan      html  css  js  c++  java
  • [LeetCode][JavaScript]Subsets II

    Subsets II

    Given a collection of integers that might contain duplicates, nums, return all possible subsets.

    Note:

    • Elements in a subset must be in non-descending order.
    • The solution set must not contain duplicate subsets.

    For example,
    If nums = [1,2,2], a solution is:

    [
      [2],
      [1],
      [1,2,2],
      [2,2],
      [1,2],
      []
    ]

    https://leetcode.com/problemset/algorithms/


    上一题相同的思路,加上去重就可以了。

    http://www.cnblogs.com/Liok3187/p/4733079.html

    非递归:

     1 /**
     2  * @param {number[]} nums
     3  * @return {number[][]}
     4  */
     5 var subsetsWithDup = function(nums) {
     6     nums = nums.sort(sorting);
     7     var res = [[]], arr = [], visited = new Set();
     8     for(var i = 0; i < nums.length; i++){
     9         if(!visited.has(nums[i])){
    10             res.push([nums[i]]);
    11             visited.add(nums[i]);
    12         }
    13         arr.push({val : [nums[i]], pos : i});
    14     }
    15     getSets(arr);
    16     return res;
    17 
    18     function getSets(arr){
    19         var i, j, tmp, nextArr = [];
    20         for(i = 0; i < arr.length; i++){
    21             for(j = arr[i].pos + 1; j < nums.length; j++){
    22                 tmp = arr[i].val.slice(0);
    23                 tmp.push(nums[j]);
    24                 if(!visited.has(tmp.join('#'))){
    25                     res.push(tmp);
    26                     visited.add(tmp.join('#'));
    27                 }
    28                 nextArr.push({val : tmp, pos : j});
    29             }
    30         }
    31         if(nextArr.length > 0){
    32             getSets(nextArr);
    33         }
    34     }
    35 
    36     function sorting(a, b){
    37         return a - b;
    38     }
    39 };

    递归:

     1 /**
     2  * @param {number[]} nums
     3  * @return {number[][]}
     4  */
     5 var subsetsWithDup = function(nums) {
     6     nums = nums.sort(sorting), visited = new Set();
     7     var res = [];
     8     for(var i = 0; i < Math.pow(2, nums.length); i++){
     9         var str = padLeft(i, nums.length);
    10         var tmp = [];
    11         for(var j = 0; j < str.length; j++){
    12             if(str[j] === '1'){
    13                 tmp.push(nums[j]);
    14             }
    15         }
    16         if(!visited.has(tmp.join('#'))){
    17             res.push(tmp);
    18             visited.add(tmp.join('#'));
    19         }
    20     }
    21     return res;
    22     
    23     function padLeft(num, len){
    24         var res = "", i = len;
    25         while(i--) res += '0';
    26         var tmp = parseInt(num).toString(2);
    27         res = res + tmp;
    28         return res.substring(tmp.length, res.length);
    29     }
    30 
    31     function sorting(a, b){
    32         return a -b;
    33     }
    34 };
  • 相关阅读:
    Mac OS中使用VScode配置C语言开发环境
    图形数据库(GraphDB)
    将博客搬至CSDN
    Nodejs课堂笔记-第四课 Dynamodb为何物
    Nodejs课堂笔记-第三课 构建一个nodejs的Docker镜像
    Nodejs课堂笔记-第二课 package.json的作用
    MyBatis 3(中文版) 第四章 使用注解配置SQL映射器
    idea hibernate jpa 生成实体类
    Maven常用配置
    spring发送邮件
  • 原文地址:https://www.cnblogs.com/Liok3187/p/4733082.html
Copyright © 2011-2022 走看看