>백엔드 개발 >Golang >Go에서 목록의 모든 순열을 생성하는 방법은 무엇입니까?

Go에서 목록의 모든 순열을 생성하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-05 15:20:10733검색

How to Generate All Permutations of a List in Go?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.