Golang排列組合演算法問題之全排列實現方法

NO IMAGE

本文例項講述了Golang排列組合演算法問題之全排列實現方法。分享給大家供大家參考,具體如下:

【排列組合問題】

一共N輛火車(0<N<10),每輛火車以數字1-9編號,要求以字典序排序輸出火車出站的序列號。

輸入:

包括N個正整數(0<N<10),範圍為1到9,數字之間用空格分割,字串首位不包含空格。

輸出:

輸出以字典序排序的火車出站序列號,每個編號以空格隔開,每個輸出序列換行。

樣例輸入:

1 2 3

樣例輸出:

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

程式碼實現:
複製程式碼 程式碼如下:package huawei
import (
    “fmt”
    “sort”
    “strings”
)
func Test7Base() {
    in := “5 2 3”
    result := outOrder(strings.Fields(in))
    dictSort(result)
    s := format(result)
    fmt.Println(s)
}
//輸入trainsNums,返回全部排列
//如輸入[1 2 3],則返回[123 132 213 231 312 321]
func outOrder(trainsNums []string) []string {
    COUNT := len(trainsNums)
    //檢查
    if COUNT == 0 || COUNT > 10 {
        panic(“Illegal argument. trainsNums size must between 1 and 9.”)
    }
    //如果只有一個數,則直接返回
    if COUNT == 1 {
        return []string{trainsNums[0]}
    }
    //否則,將最後一個數插入到前面的排列數中的所有位置(遞迴)
    return insert(outOrder(trainsNums[:COUNT-1]), trainsNums[COUNT-1])
}
func insert(res []string, insertNum string) []string {
    //儲存結果的slice
    result := make([]string, len(res)*(len(res[0]) 1))
    index := 0
    for _, v := range res {
        for i := 0; i < len(v); i {
            //在v的每一個元素前面插入
            result[index] = v[:i] insertNum v[i:]
            index
        }
        //在v最後面插入
        result[index] = v insertNum
        index
    }
    return result
}
//按字典順序排序
func dictSort(res []string) {
    sort.Strings(res)
}
//按指定格式輸出
func format(res []string) string {
    strs := make([]string, len(res))
    for i := 0; i < len(res); i {
        strs[i] = addWhiteSpace(res[i])
    }
    return strings.Join(strs, “\n”)
}
//新增空格
func addWhiteSpace(s string) string {
    var retVal string
    for i := 0; i < len(s); i {
        retVal = string(s[i])
        if i != len(s)-1 {
            retVal = ” “
        }
    }
    return retVal
}

希望本文所述對大家Go語言程式設計有所幫助。

您可能感興趣的文章:

Go語言對字串進行SHA1雜湊運算的方法GO語言執行環境下載、安裝、配置圖文教程go語言檔案正規表示式搜尋功能示例Go語言正規表示式用法例項小結【查詢、匹配、替換等】Go語言中三種不同md5計算方式的效能比較Go語言中反射的正確使用PHP與Go語言之間的通訊詳解深入理解GO語言的物件導向利用Go語言實現簡單Ping過程的方法Go語言如何併發超時處理詳解Go語言實現的排列組合問題例項(n個數中取m個)