在Go 中產生所有排列
簡介
產生清單的所有可能排列元素清單的所有可能排列元素是程式設計中的常見問題。本文探討了 Heap 演算法,它是產生所有排列的最簡單方法之一。產生的排列不會依字典順序排序。
堆疊演算法
堆演算法透過選擇一對要交換的元素來產生每個排列。它從一種基本情況開始,其中數組只有一個元素。對於較大的數組,它會迭代元素,交換對以遞歸地產生新的排列。
Go 實作
以下是 Heap 演算法的 Go 實作:
func permutations(arr []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))
輸出
[[1 2 3] [2 1 3] [3 2 1] [2 3 1] [3 1 2] [1 3 2]]
額外的註釋
以上是Heap演算法如何產生Go中的所有排列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!