处理数据集时,通常需要生成元素列表的所有可能排列。 Go 提供了一个强大的编程环境,可以高效地创建排列。
堆算法是一种众所周知的生成排列的方法。它通过交换元素对来构造前一个排列的每个排列。以下 Heap 算法的实现返回数组的所有排列:
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))
输出:
[[1 2 3] [2 1 3] [3 2 1] [2 3 1] [3 1 2] [1 3 2]]
请注意,排列不是按字典顺序排序的。要实现排序排列,请考虑使用阶乘系统生成它们,如有关排列的链接文档中所述。
在 Go 中生成排列的其他资源包括:
以上是Go中如何高效生成列表的所有排列?的详细内容。更多信息请关注PHP中文网其他相关文章!