From 75a2f88e773d096fbe26c3cac9edb5f5417b593d Mon Sep 17 00:00:00 2001 From: zhiyelee Date: Fri, 10 May 2019 10:36:21 -0500 Subject: [PATCH 1/4] add Subsets II --- js/subsetsIi/README.md | 22 ++++++++++++++++++++++ js/subsetsIi/subsets-ii.js | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 js/subsetsIi/README.md create mode 100644 js/subsetsIi/subsets-ii.js diff --git a/js/subsetsIi/README.md b/js/subsetsIi/README.md new file mode 100644 index 0000000..15c488b --- /dev/null +++ b/js/subsetsIi/README.md @@ -0,0 +1,22 @@ +## Subsets II +link: + +Given a collection of integers that might contain duplicates, nums, return all possible subsets. + +Note: 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], + [] +] +``` diff --git a/js/subsetsIi/subsets-ii.js b/js/subsetsIi/subsets-ii.js new file mode 100644 index 0000000..ee75d50 --- /dev/null +++ b/js/subsetsIi/subsets-ii.js @@ -0,0 +1,36 @@ +/** + * @param {number[]} nums + * @return {number[][]} + **/ +var subsetsWithDup = function(nums) { + return getSolutions(nums, []).concat([[]]); +}; + +function getSolutions(nums, list) { + if (nums.length === 0) { + return []; + } + + var resNext = getSolutions(nums.slice(1), list); + + var res = []; + var current = nums[0]; + if (list.indexOf(current) === -1) { + list.push(current); + res.push([current]); + } + + res = [].concat(resNext, res); + + // n and n - 1 + for (var i = 0; i < resNext.length; i++) { + var val = resNext[i]; + res.push([].concat(current, val)); + } + + return res; +} + +console.log(subsetsWithDup([1, 2, 2])) + +var eq = require('assert').deepEqual; From 5f5103fb8bbf2496629a4bf5d3221f4c9d356e89 Mon Sep 17 00:00:00 2001 From: zhiyelee Date: Wed, 15 May 2019 00:49:56 -0500 Subject: [PATCH 2/4] fail test --- js/subsetsIi/subsets-ii.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/subsetsIi/subsets-ii.js b/js/subsetsIi/subsets-ii.js index ee75d50..76f31dc 100644 --- a/js/subsetsIi/subsets-ii.js +++ b/js/subsetsIi/subsets-ii.js @@ -8,7 +8,7 @@ var subsetsWithDup = function(nums) { function getSolutions(nums, list) { if (nums.length === 0) { - return []; + return [1]; } var resNext = getSolutions(nums.slice(1), list); From a31cb096a4c33ea927e82aa2feb146255423b7cb Mon Sep 17 00:00:00 2001 From: zhiyelee Date: Wed, 15 May 2019 01:10:55 -0500 Subject: [PATCH 3/4] add more tests --- js/subsetsIi/subsets-ii.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/js/subsetsIi/subsets-ii.js b/js/subsetsIi/subsets-ii.js index 76f31dc..356ff3d 100644 --- a/js/subsetsIi/subsets-ii.js +++ b/js/subsetsIi/subsets-ii.js @@ -8,7 +8,7 @@ var subsetsWithDup = function(nums) { function getSolutions(nums, list) { if (nums.length === 0) { - return [1]; + return []; } var resNext = getSolutions(nums.slice(1), list); @@ -34,3 +34,6 @@ function getSolutions(nums, list) { console.log(subsetsWithDup([1, 2, 2])) var eq = require('assert').deepEqual; +eq(subsetsWithDup([1, 2, 2]), [[2], [1], [1,2,2], [2,2], [1,2], []]); + +eq(subsetsWithDup([1, 1, 2, 2]), [[],[1],[1,1],[1,1,2],[1,1,2,2],[1,2],[1,2,2],[2],[2,2]]); From 159070444996a728471a5b7dc6a9f50223da35d0 Mon Sep 17 00:00:00 2001 From: zhiyelee Date: Sat, 17 Apr 2021 08:23:16 -0500 Subject: [PATCH 4/4] improve readme --- js/subsets/README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/js/subsets/README.md b/js/subsets/README.md index c4a750b..2ca7713 100644 --- a/js/subsets/README.md +++ b/js/subsets/README.md @@ -9,8 +9,7 @@ Note: The solution set must not contain duplicate subsets. For example, If nums = [1,2,3], a solution is: - - +``` [ [3], [1], @@ -21,3 +20,5 @@ If nums = [1,2,3], a solution is: [1,2], [] ] + +```