Files
advent-of-code-go/util/MakePermutations.go
T
2020-08-03 15:54:04 -04:00

35 lines
989 B
Go

package util
// MakePermutations will make all permutations of the numbers input
// returns a pointer to avoid copying a large number of permutations
func MakePermutations(numbers []int) *[][]int {
result := make([][]int, 0)
swapRecurseBacktrack(numbers, 0, &result)
return &result
}
// helper function to generate permutations
func swapRecurseBacktrack(numbers []int, startIndex int, results *[][]int) {
if startIndex == len(numbers) {
// make a copy of the perm
perm := make([]int, len(numbers))
copy(perm, numbers)
// assign the value at the pointer results to the appended slice (dereferenced) results w/ perm
*results = append(*results, perm)
}
for i := startIndex; i < len(numbers); i++ {
// swap numbers
numbers[startIndex], numbers[i] = numbers[i], numbers[startIndex]
// recurse with startIndex incremented
swapRecurseBacktrack(numbers, startIndex+1, results)
// backtrack
numbers[startIndex], numbers[i] = numbers[i], numbers[startIndex]
}
}