mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-06 01:18:23 +08:00
added Backtracking/AllCombinationsOfSizeK
This commit is contained in:
57
Backtracking/AllCombinationsOfSizeK.js
Normal file
57
Backtracking/AllCombinationsOfSizeK.js
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
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 froms a collections without considering 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.combinationArray = [] // will be used for storing current combination
|
||||||
|
}
|
||||||
|
|
||||||
|
findCombinations (high = this.n, total = this.k, low = 1) {
|
||||||
|
if (total === 0) {
|
||||||
|
console.log(this.combinationArray)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for (let i = low; i <= high; i++) {
|
||||||
|
this.combinationArray.push(i)
|
||||||
|
this.findCombinations(high, total - 1, i + 1)
|
||||||
|
this.combinationArray.pop()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Driver Code
|
||||||
|
|
||||||
|
Test Case 1: n = 3, k = 2
|
||||||
|
Test Case 2: n = 4, k = 2
|
||||||
|
*/
|
||||||
|
|
||||||
|
console.log('\nFirst Test Case')
|
||||||
|
const test1 = new Combinations(3, 2)
|
||||||
|
test1.findCombinations()
|
||||||
|
|
||||||
|
console.log('\nSecond Test Case')
|
||||||
|
const test2 = new Combinations(4, 2)
|
||||||
|
test2.findCombinations()
|
12437
package-lock.json
generated
12437
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -12,10 +12,10 @@
|
|||||||
"@babel/core": "^7.11.6",
|
"@babel/core": "^7.11.6",
|
||||||
"@babel/plugin-transform-runtime": "^7.11.5",
|
"@babel/plugin-transform-runtime": "^7.11.5",
|
||||||
"@babel/preset-env": "^7.11.5",
|
"@babel/preset-env": "^7.11.5",
|
||||||
|
"atob": "2.1.2",
|
||||||
"jsdom": "^16.3.0",
|
"jsdom": "^16.3.0",
|
||||||
"node": "^14.13.1",
|
"node": "^14.13.1",
|
||||||
"node-fetch": "2.6.1",
|
"node-fetch": "2.6.1"
|
||||||
"atob": "2.1.2"
|
|
||||||
},
|
},
|
||||||
"standard": {
|
"standard": {
|
||||||
"env": [
|
"env": [
|
||||||
|
Reference in New Issue
Block a user