Напишите код для перестановки всех символов строки.



Реализуйте функцию perm(), которая принимает слайс или строку и выводит все возможные комбинации символов. Пишите свой вариант ответа в комментариях.



Ответ



package main

import "fmt"



// Perm calls f with each permutation of a.



func Perm(a []rune, f func([]rune)) {

perm(a, f, 0)

}



// Permute the values at index i to len(a)-1.



func perm(a []rune, f func([]rune), i int) {

if i > len(a) {

f(a)

return

}

perm(a, f, i+1)

for j := i + 1; j < len(a); j++ {

a[i], a[j] = a[j], a[i]

perm(a, f, i+1)

a[i], a[j] = a[j], a[i]

}

}



func main() {

Perm([]rune("abc"), func(a []rune) {

fmt.Println(string(a))

})

}



@golang_interview