package main
import "strings"
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param str string字符串
* @return string字符串一维数组
*/
var res []string
var chars []string
func Permutation( str string ) []string {
// write code here
chars = strings.Split(str, "")
dfs(0)
return res
}
func dfs(start int) {
//遍历到结尾
if start == len(chars)-1 {
//将切片转为string
res = append(res, strings.Join(chars, ""))
return
}
existMap := make(map[string]int, 0)
for i := start; i < len(chars); i++ {
//同一层递归中,存在相同的字符,跳过
if _, ok := existMap[chars[i]]; ok {
continue
}
//记录字符
existMap[chars[i]] = 1
//交换字符
swap(i, start)
//递归
dfs(start + 1)
//恢复交换的字符
swap(start, i)
}
}
func swap(i, j int) {
tmp := chars[i]
chars[i] = chars[j]
chars[j] = tmp
}