假设有这么一个数组
var arr = []string{"a" , "b" , "c" , "d" , "e"};
思路
- 假设只有两个元素ab,那么结果集 ret[2] 就是 ab , ba
- 假设有三个元素abc , 那么操作方法就是 将第三个元素c分别插入两个元素的结果集 ret[2] 元素的所有位置中 , 比如ab , 那依次是 ?ab , a?b , ab? , 得到结果集 ret[3]
- 以此类推
- 假设有n个元素 , 那么结果集 ret[n] 就是 将第n个元素分别插入ret[n-1]结果集中每个元素的所有位置
- 复杂度是 n!
看代码
func method1(arr []string) []string {
if(len(arr) == 2){
return []string{
arr[0] + arr[1] ,
arr[1] + arr[0],
};
}else {
strTmp := arr[0];
newArr := arr[1:];
retArr := method1(newArr);
var result []string;
//取出一个元素,循环插入结果中
for _ , v := range retArr{
for i := 0; i < len(v) + 1 ; i ++ {
var tmp string;
if(i == 0){
tmp = strTmp + v;
}else if(i == len(v)){
tmp = v + strTmp;
}else {
tmp = v[:i] + strTmp + v[i:]
}
result = append(result , tmp);
}
}
return result;
}
}