updated util packages

This commit is contained in:
alexchao26
2020-12-10 01:04:51 -05:00
parent b9a74cf122
commit 1fec4f74d3
47 changed files with 285 additions and 95 deletions
+34
View File
@@ -0,0 +1,34 @@
package algos
// 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]
}
}