在 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中文网其他相关文章!