package main
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param str string字符串
* @return string字符串一维数组
*/
func Permutation( str string ) []string {
// 思路和有重复数字数组的排列组合一个思路
if len(str)<2 {return []string{str}}
bytes:=[]byte(str)
return bt(bytes,0)
}
func bt(bytes []byte,level int)[]string{
if len(bytes)==level{return []string{string(bytes)}}
visit:=map[byte]bool{}
result:=[]string{}
for i:=level;i<len(bytes);i++{
if !visit[bytes[i]]{
visit[bytes[i]]=true
bytes[i],bytes[level]=bytes[level],bytes[i]
result=append(result, bt(bytes,level+1)...)
bytes[i],bytes[level]=bytes[level],bytes[i]
}
}
return result
}