mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-07 11:08:54 +08:00
Update AllCombinationsOfSizeK.js (#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
This commit is contained in:
@ -1,46 +1,28 @@
|
|||||||
/*
|
function generateCombinations(n, k) {
|
||||||
Problem: Given two numbers, n and k, make all unique combinations of k numbers from 1 to n and in sorted order
|
let currentCombination = []
|
||||||
|
let allCombinations = [] // will be used for storing all combinations
|
||||||
|
let currentValue = 1
|
||||||
|
|
||||||
What is combinations?
|
function findCombinations() {
|
||||||
- Combinations is selecting items from a collections without considering the order of selection
|
if (currentCombination.length === k) {
|
||||||
|
// Add the array of size k to the allCombinations array
|
||||||
Example:
|
allCombinations.push([...currentCombination])
|
||||||
- We have an apple, a banana, and a jackfruit
|
return
|
||||||
- We have three objects, and need to choose two items, then combinations will be
|
}
|
||||||
|
if (currentValue > n) {
|
||||||
1. Apple & Banana
|
// Check for exceeding the range
|
||||||
2. Apple & Jackfruit
|
return
|
||||||
3. Banana & Jackfruit
|
}
|
||||||
|
currentCombination.push(currentValue++)
|
||||||
To read more about combinations, you can visit the following link:
|
findCombinations()
|
||||||
- https://betterexplained.com/articles/easy-permutations-and-combinations/
|
currentCombination.pop()
|
||||||
|
findCombinations()
|
||||||
Solution:
|
currentValue--
|
||||||
- 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) {
|
findCombinations()
|
||||||
if (total === 0) {
|
|
||||||
this.combinations.push([...this.current])
|
return allCombinations
|
||||||
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 }
|
export { generateCombinations }
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import { Combinations } from '../AllCombinationsOfSizeK'
|
import { generateCombinations } from '../AllCombinationsOfSizeK'
|
||||||
|
|
||||||
describe('AllCombinationsOfSizeK', () => {
|
describe('AllCombinationsOfSizeK', () => {
|
||||||
it('should return 3x2 matrix solution for n = 3 and k = 2', () => {
|
it('should return 3x2 matrix solution for n = 3 and k = 2', () => {
|
||||||
const test1 = new Combinations(3, 2)
|
const res = generateCombinations(3, 2)
|
||||||
expect(test1.findCombinations()).toEqual([
|
expect(res).toEqual([
|
||||||
[1, 2],
|
[1, 2],
|
||||||
[1, 3],
|
[1, 3],
|
||||||
[2, 3]
|
[2, 3]
|
||||||
@ -11,8 +11,8 @@ describe('AllCombinationsOfSizeK', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it('should return 6x2 matrix solution for n = 4 and k = 2', () => {
|
it('should return 6x2 matrix solution for n = 4 and k = 2', () => {
|
||||||
const test2 = new Combinations(4, 2)
|
const res = generateCombinations(4, 2)
|
||||||
expect(test2.findCombinations()).toEqual([
|
expect(res).toEqual([
|
||||||
[1, 2],
|
[1, 2],
|
||||||
[1, 3],
|
[1, 3],
|
||||||
[1, 4],
|
[1, 4],
|
||||||
|
Reference in New Issue
Block a user