refactor of day07 solution

This commit is contained in:
Alex Chao
2020-08-03 15:54:04 -04:00
parent 62dcb76a46
commit 534995dcac
9 changed files with 410 additions and 738 deletions
+34
View File
@@ -0,0 +1,34 @@
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]
}
}