mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-19 18:13:44 +08:00

* 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>
47 lines
1.3 KiB
JavaScript
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 }
|