diff --git a/Backtracking/GeneratePermutations.js b/Backtracking/GeneratePermutations.js index fa302345d..e62da30df 100644 --- a/Backtracking/GeneratePermutations.js +++ b/Backtracking/GeneratePermutations.js @@ -1,8 +1,8 @@ /* - * Problem Statement: Generate all distinct permutations of a string/array (all permutations should be in sorted order); + * Problem Statement: Generate all distinct permutations of a an array (all permutations should be in sorted order); * * What is permutations? - * - Permutation means possible arrangements in a set (here it is string/array); + * - Permutation means possible arrangements in a set (here it is an array); * * Reference to know more about permutations: * - https://www.britannica.com/science/permutation @@ -17,17 +17,21 @@ const swap = (arr, i, j) => { return newArray } -const permutations = (arr, low, high) => { - if (low === high) { - console.log(arr.join(' ')) - return - } - for (let i = low; i <= high; i++) { - arr = swap(arr, low, i) - permutations(arr, low + 1, high) +const permutations = arr => { + let P = [] + const permute = (arr, low, high) => { + if (low === high) { + P.push([...arr]) + // console.log(arr.join(' ')) + return P + } + for (let i = low; i <= high; i++) { + arr = swap(arr, low, i) + permute(arr, low + 1, high) + } + return P } + return permute(arr, 0, arr.length - 1) } -// Driver Code -const input = [1, 2, 3] -permutations(input, 0, input.length - 1) +export { permutations } diff --git a/Backtracking/tests/GeneratePermutations.test.js b/Backtracking/tests/GeneratePermutations.test.js new file mode 100644 index 000000000..7c8f1c540 --- /dev/null +++ b/Backtracking/tests/GeneratePermutations.test.js @@ -0,0 +1,14 @@ +import { permutations } from '../GeneratePermutations' + +describe('Permutations', () => { + it('Permutations of [1, 2, 3]', () => { + expect(permutations([1, 2, 3])).toEqual([ + [ 1, 2, 3 ], + [ 1, 3, 2 ], + [ 2, 1, 3 ], + [ 2, 3, 1 ], + [ 3, 1, 2 ], + [ 3, 2, 1 ] + ]) + }) +})