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中文網其他相關文章!