forked from TheAlgorithms/JavaScript
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update AllCombinationsOfSizeK.js (TheAlgorithms#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
- Loading branch information
Showing
2 changed files
with
28 additions
and
46 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters