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语言程序设计有所帮助。