2020-10-15 16:38:32 +05:45
/*
a permutation of a set is, loosely speaking, an arrangement of its members into a sequence or linear order, or if the set is already ordered, a rearrangement of its elements.
The word "permutation" also refers to the act or process of changing the linear order of an ordered set
More at : https://en.wikipedia.org/wiki/Permutation
2020-10-15 16:39:00 +05:45
*/
2020-10-15 16:38:32 +05:45
2020-10-04 20:45:18 +05:45
const createPermutations = ( str ) => {
2023-10-03 23:08:19 +02:00
// convert string to array
2020-10-04 20:45:18 +05:45
const arr = str . split ( '' )
// get array length
const strLen = arr . length
// this will hold all the permutations
const perms = [ ]
let rest
let picked
let restPerms
let next
2020-10-04 20:35:09 +05:45
2020-10-04 20:45:18 +05:45
// if strLen is zero, return the same string
2023-10-03 23:08:19 +02:00
if ( strLen === 0 ) {
return [ str ]
}
2020-10-04 20:45:18 +05:45
// loop to the length to get all permutations
for ( let i = 0 ; i < strLen ; i ++ ) {
rest = Object . create ( arr )
picked = rest . splice ( i , 1 )
2020-10-04 20:35:09 +05:45
2020-10-04 20:45:18 +05:45
restPerms = createPermutations ( rest . join ( '' ) )
2020-10-04 20:35:09 +05:45
2020-10-04 20:45:18 +05:45
for ( let j = 0 , jLen = restPerms . length ; j < jLen ; j ++ ) {
next = picked . concat ( restPerms [ j ] )
perms . push ( next . join ( '' ) )
2020-10-04 20:35:09 +05:45
}
2020-10-04 20:45:18 +05:45
}
return perms
2020-10-04 20:35:09 +05:45
}
2021-05-06 21:08:47 +05:30
export { createPermutations }