mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-05 00:01:37 +08:00
Merge branch 'kadanes' of https://github.com/thisabhijeet/Javascript into kadanes
This commit is contained in:
44
Backtracking/AllCombinationsOfSizeK.js
Normal file
44
Backtracking/AllCombinationsOfSizeK.js
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export { Combinations }
|
13
Backtracking/tests/AllCombinationsOfSizeK.test.mjs
Normal file
13
Backtracking/tests/AllCombinationsOfSizeK.test.mjs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import { Combinations } 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([[1, 2], [1, 3], [2, 3]])
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return 6x2 matrix solution for n = 3 and k = 2', () => {
|
||||||
|
const test2 = new Combinations(4, 2)
|
||||||
|
expect(test2.findCombinations).toEqual([[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]])
|
||||||
|
})
|
||||||
|
})
|
@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
## Backtracking
|
## Backtracking
|
||||||
|
* [AllCombinationsOfSizeK](https://github.com/TheAlgorithms/Javascript/blob/master/Backtracking/AllCombinationsOfSizeK.js)
|
||||||
* [GeneratePermutations](https://github.com/TheAlgorithms/Javascript/blob/master/Backtracking/GeneratePermutations.js)
|
* [GeneratePermutations](https://github.com/TheAlgorithms/Javascript/blob/master/Backtracking/GeneratePermutations.js)
|
||||||
* [KnightTour](https://github.com/TheAlgorithms/Javascript/blob/master/Backtracking/KnightTour.js)
|
* [KnightTour](https://github.com/TheAlgorithms/Javascript/blob/master/Backtracking/KnightTour.js)
|
||||||
* [NQueen](https://github.com/TheAlgorithms/Javascript/blob/master/Backtracking/NQueen.js)
|
* [NQueen](https://github.com/TheAlgorithms/Javascript/blob/master/Backtracking/NQueen.js)
|
||||||
|
12437
package-lock.json
generated
12437
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -14,10 +14,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