Skip to content

Commit

Permalink
Update AllCombinationsOfSizeK.js (TheAlgorithms#1530)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
imrahulkb authored Oct 30, 2023
1 parent 1cc5e61 commit cafb343
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 46 deletions.
64 changes: 23 additions & 41 deletions Backtracking/AllCombinationsOfSizeK.js
Original file line number Diff line number Diff line change
@@ -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
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 = []
}

findCombinations(high = this.n, total = this.k, low = 1) {
if (total === 0) {
this.combinations.push([...this.current])
return this.combinations
function generateCombinations(n, k) {
let currentCombination = []
let allCombinations = [] // will be used for storing all combinations
let currentValue = 1

function findCombinations() {
if (currentCombination.length === k) {
// Add the array of size k to the allCombinations array
allCombinations.push([...currentCombination])
return
}
for (let i = low; i <= high; i++) {
this.current.push(i)
this.findCombinations(high, total - 1, i + 1)
this.current.pop()
if (currentValue > n) {
// Check for exceeding the range
return
}
return this.combinations
currentCombination.push(currentValue++)
findCombinations()
currentCombination.pop()
findCombinations()
currentValue--
}

findCombinations()

return allCombinations
}

export { Combinations }
export { generateCombinations }
10 changes: 5 additions & 5 deletions Backtracking/tests/AllCombinationsOfSizeK.test.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
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]
])
})

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],
Expand Down

0 comments on commit cafb343

Please sign in to comment.