Files
JavaScript/Backtracking/AllCombinationsOfSizeK.js
Roland Hummel 86d333ee94 feat: Test running overhaul, switch to Prettier & reformat everything (#1407)
* chore: Switch to Node 20 + Vitest

* chore: migrate to vitest mock functions

* chore: code style (switch to prettier)

* test: re-enable long-running test

Seems the switch to Node 20 and Vitest has vastly improved the code's and / or the test's runtime!

see #1193

* chore: code style

* chore: fix failing tests

* Updated Documentation in README.md

* Update contribution guidelines to state usage of Prettier

* fix: set prettier printWidth back to 80

* chore: apply updated code style automatically

* fix: set prettier line endings to lf again

* chore: apply updated code style automatically

---------

Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com>
Co-authored-by: Lars Müller <34514239+appgurueu@users.noreply.github.com>
2023-10-04 02:38:19 +05:30

47 lines
1.3 KiB
JavaScript

/*
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
}
for (let i = low; i <= high; i++) {
this.current.push(i)
this.findCombinations(high, total - 1, i + 1)
this.current.pop()
}
return this.combinations
}
}
export { Combinations }