码迷,mamicode.com
首页 > 编程语言 > 详细

[LeetCode][JavaScript]Subsets II

时间:2015-08-15 21:21:33      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

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],
  []
]

 

 


 

 

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

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         if(a > b){
38             return 1;
39         }else if(a < b){
40             return -1;
41         }else{
42             return 0;
43         }
44     }
45 };

 

递归:

 1 /**
 2  * @param {number[]} nums
 3  * @return {number[][]}
 4  */
 5 var subsetsWithDup2 = 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         if(a > b){
33             return 1;
34         }else if(a < b){
35             return -1;
36         }else{
37             return 0;
38         }
39     }
40 };

 

 

[LeetCode][JavaScript]Subsets II

标签:

原文地址:http://www.cnblogs.com/Liok3187/p/4733082.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!