Syncing to desktop
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user