首頁 > 後端開發 > Golang > 如何在 Go 中產生列表的所有排列?

如何在 Go 中產生列表的所有排列?

Patricia Arquette
發布: 2024-12-05 15:20:10
原創
734 人瀏覽過

How to Generate All Permutations of a List in Go?

Go 中的排列:深入指南

本文討論了產生元素清單的所有可能排列的不同方法Go。

一種常見的方法是 Heap 演算法,它透過以下方式從前一個排列產生每個排列:交換一對元素。以下 Go 函數實作了此演算法:

func permutations(arr []int)[][]int{
    var helper func([]int, int)
    res := [][]int{}

    helper = func(arr []int, n int){
        if n == 1{
            tmp := make([]int, len(arr))
            copy(tmp, arr)
            res = append(res, tmp)
        } else {
            for i := 0; i < n; i++{
                helper(arr, n - 1)
                if n % 2 == 1{
                    tmp := arr[i]
                    arr[i] = arr[n - 1]
                    arr[n - 1] = tmp
                } else {
                    tmp := arr[0]
                    arr[0] = arr[n - 1]
                    arr[n - 1] = tmp
                }
            }
        }
    }
    helper(arr, len(arr))
    return res
}
登入後複製

要使用此函數,只需傳入一個整數切片,它將傳回輸入清單的所有排列的切片。例如:

arr := []int{1, 2, 3}
fmt.Println(permutations(arr))
登入後複製

產生排列的另一種方法是使用階乘系統。此方法允許快速產生第 n 個字典排列。有關此方法的更多信息,請參閱上面文章中的“排列”部分。

透過實作這些方法,您可以輕鬆地在 Go 中產生排列以用於各種應用程式。

以上是如何在 Go 中產生列表的所有排列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板