From cafb3433e816bafc8115315a5771a7a01d5a174a Mon Sep 17 00:00:00 2001 From: Rahul Bhandari <90493221+imrahulkb@users.noreply.github.com> Date: Mon, 30 Oct 2023 11:10:02 +0530 Subject: [PATCH] Update AllCombinationsOfSizeK.js (#1530) * Update AllCombinationsOfSizeK.js * Update AllCombinationsOfSizeK.js * Update AllCombinationsOfSizeK.test.js Changes made it the type of testing. Instead of testing the class now the program will test the function * Update AllCombinationsOfSizeK.js * Update AllCombinationsOfSizeK.js * Update AllCombinationsOfSizeK.js * Update AllCombinationsOfSizeK.test.js * Update AllCombinationsOfSizeK.test.js --- Backtracking/AllCombinationsOfSizeK.js | 64 +++++++------------ .../tests/AllCombinationsOfSizeK.test.js | 10 +-- 2 files changed, 28 insertions(+), 46 deletions(-) diff --git a/Backtracking/AllCombinationsOfSizeK.js b/Backtracking/AllCombinationsOfSizeK.js index 264acb1f1..bbe4e7fd5 100644 --- a/Backtracking/AllCombinationsOfSizeK.js +++ b/Backtracking/AllCombinationsOfSizeK.js @@ -1,46 +1,28 @@ -/* - Problem: Given two numbers, n and k, make all unique combinations of k numbers from 1 to n and in sorted order +function generateCombinations(n, k) { + let currentCombination = [] + let allCombinations = [] // will be used for storing all combinations + let currentValue = 1 - What is combinations? - - Combinations is selecting items from a collections without considering the order of selection - - Example: - - We have an apple, a banana, and a jackfruit - - We have three objects, and need to choose two items, then combinations will be - - 1. Apple & Banana - 2. Apple & Jackfruit - 3. Banana & Jackfruit - - To read more about combinations, you can visit the following link: - - https://betterexplained.com/articles/easy-permutations-and-combinations/ - - Solution: - - We will be using backtracking to solve this questions - - Take one element, and make all them combinations for k-1 elements - - Once we get all combinations of that element, pop it and do same for next element -*/ - -class Combinations { - constructor(n, k) { - this.n = n - this.k = k - this.current = [] // will be used for storing current combination - this.combinations = [] + function findCombinations() { + if (currentCombination.length === k) { + // Add the array of size k to the allCombinations array + allCombinations.push([...currentCombination]) + return + } + if (currentValue > n) { + // Check for exceeding the range + return + } + currentCombination.push(currentValue++) + findCombinations() + currentCombination.pop() + findCombinations() + currentValue-- } - findCombinations(high = this.n, total = this.k, low = 1) { - if (total === 0) { - this.combinations.push([...this.current]) - return this.combinations - } - for (let i = low; i <= high; i++) { - this.current.push(i) - this.findCombinations(high, total - 1, i + 1) - this.current.pop() - } - return this.combinations - } + findCombinations() + + return allCombinations } -export { Combinations } +export { generateCombinations } diff --git a/Backtracking/tests/AllCombinationsOfSizeK.test.js b/Backtracking/tests/AllCombinationsOfSizeK.test.js index a2135e54b..29b656a2c 100644 --- a/Backtracking/tests/AllCombinationsOfSizeK.test.js +++ b/Backtracking/tests/AllCombinationsOfSizeK.test.js @@ -1,9 +1,9 @@ -import { Combinations } from '../AllCombinationsOfSizeK' +import { generateCombinations } from '../AllCombinationsOfSizeK' describe('AllCombinationsOfSizeK', () => { it('should return 3x2 matrix solution for n = 3 and k = 2', () => { - const test1 = new Combinations(3, 2) - expect(test1.findCombinations()).toEqual([ + const res = generateCombinations(3, 2) + expect(res).toEqual([ [1, 2], [1, 3], [2, 3] @@ -11,8 +11,8 @@ describe('AllCombinationsOfSizeK', () => { }) it('should return 6x2 matrix solution for n = 4 and k = 2', () => { - const test2 = new Combinations(4, 2) - expect(test2.findCombinations()).toEqual([ + const res = generateCombinations(4, 2) + expect(res).toEqual([ [1, 2], [1, 3], [1, 4],