diff --git a/Backtracking/GenerateSubsets b/Backtracking/GenerateSubsets new file mode 100644 index 0000000000..6cccc5b27f --- /dev/null +++ b/Backtracking/GenerateSubsets @@ -0,0 +1,26 @@ +function generateSubsets(nums) { + const subsets = []; + + function backtrack(start = 0, currentSubset = []) { + // Add the currentSubset to the subsets array + subsets.push([...currentSubset]); + + // Explore all possible subsets by backtracking + for (let i = start; i < nums.length; i++) { + currentSubset.push(nums[i]); + backtrack(i + 1, currentSubset); + currentSubset.pop(); + } + } + + backtrack(); + return subsets; +} + +const inputSet = [1, 2, 3]; +const allSubsets = generateSubsets(inputSet); + +console.log("All Subsets:"); +for (const subset of allSubsets) { + console.log(subset); +} diff --git a/Backtracking/tests/GenerateSubsets.js b/Backtracking/tests/GenerateSubsets.js new file mode 100644 index 0000000000..fc977516e2 --- /dev/null +++ b/Backtracking/tests/GenerateSubsets.js @@ -0,0 +1,24 @@ +// we define a generateSubsets function that uses backtracking to generate all possible subsets of a given set (array of numbers). The backtrack function is a recursive function that explores all possible subsets by considering or excluding each element. + +import { generateSubsets } from '../GenerateSubsets' + +describe('generateSubsets', () => { + it('should generate all subsets for an array', () => { + const inputSet = [1, 2, 3]; + const expectedSubsets = [ + [], + [1], + [1, 2], + [1, 2, 3], + [1, 3], + [2], + [2, 3], + [3] + ]; + + const subsets = generateSubsets(inputSet); + + // Check if the generated subsets are deep equal to the expected subsets + expect(subsets).to.deep.have.members(expectedSubsets); + }); +});