Syncing to desktop

This commit is contained in:
2019-12-08 21:51:43 -06:00
parent 930491c840
commit 5b5e519ddf
9 changed files with 202 additions and 4 deletions

View File

@@ -141,3 +141,48 @@ func stringPermHelper(str string, i int) []string {
}
return ret
}
func IntPermutations(inp []int) [][]int {
perms := intPermHelper(inp, 0)
var wrk [][]int
// Now de-dupe
for i := range perms {
var found bool
for j := range wrk {
if IntSlicesAreEqual(perms[i], wrk[j]) {
found = true
break
}
}
if !found {
wrk = append(wrk, perms[i])
}
}
return wrk
}
func intPermHelper(inp []int, i int) [][]int {
ret := [][]int{inp}
if i != len(inp) {
r := make([]int, len(inp))
copy(r, inp)
for j := i; j < len(r); j++ {
r[i], r[j] = r[j], r[i]
ret = append(ret, intPermHelper(r, i+1)...)
r[i], r[j] = r[j], r[i]
}
}
return ret
}
func IntSlicesAreEqual(s1 []int, s2 []int) bool {
if len(s1) != len(s2) {
return false
}
for k := range s1 {
if s1[k] != s2[k] {
return false
}
}
return true
}