Golang排列组合算法问题之全排列实现方法
本文实例讲述了Golang排列组合算法问题之全排列实现方法。分享给大家供大家参考,具体如下:
【排列组合问题】
一共N辆火车(0<N<10),每辆火车以数字1-9编号,要求以字典序排序输出火车出站的序列号。
输入:
包括N个正整数(0<N<10),范围为1到9,数字之间用空格分割,字符串首位不包含空格。
输出:
输出以字典序排序的火车出站序列号,每个编号以空格隔开,每个输出序列换行。
样例输入:
123
样例输出:
123
132
213
231
312
321
代码实现:
packagehuawei
import(
"fmt"
"sort"
"strings"
)
funcTest7Base(){
in:="523"
result:=outOrder(strings.Fields(in))
dictSort(result)
s:=format(result)
fmt.Println(s)
}
//输入trainsNums,返回全部排列
//如输入[123],则返回[123132213231312321]
funcoutOrder(trainsNums[]string)[]string{
COUNT:=len(trainsNums)
//检查
ifCOUNT==0||COUNT>10{
panic("Illegalargument.trainsNumssizemustbetween1and9.")
}
//如果只有一个数,则直接返回
ifCOUNT==1{
return[]string{trainsNums[0]}
}
//否则,将最后一个数插入到前面的排列数中的所有位置(递归)
returninsert(outOrder(trainsNums[:COUNT-1]),trainsNums[COUNT-1])
}
funcinsert(res[]string,insertNumstring)[]string{
//保存结果的slice
result:=make([]string,len(res)*(len(res[0])+1))
index:=0
for_,v:=rangeres{
fori:=0;i<len(v);i++{
//在v的每一个元素前面插入
result[index]=v[:i]+insertNum+v[i:]
index++
}
//在v最后面插入
result[index]=v+insertNum
index++
}
returnresult
}
//按字典顺序排序
funcdictSort(res[]string){
sort.Strings(res)
}
//按指定格式输出
funcformat(res[]string)string{
strs:=make([]string,len(res))
fori:=0;i<len(res);i++{
strs[i]=addWhiteSpace(res[i])
}
returnstrings.Join(strs,"\n")
}
//添加空格
funcaddWhiteSpace(sstring)string{
varretValstring
fori:=0;i<len(s);i++{
retVal+=string(s[i])
ifi!=len(s)-1{
retVal+=""
}
}
returnretVal
}
希望本文所述对大家Go语言程序设计有所帮助。