Go에서 가능한 모든 n-문자 비밀번호 생성
Go에서 주어진 세트의 문자를 사용하여 지정된 길이의 가능한 모든 비밀번호를 생성하려면 , n-ary Cartesian product의 개념을 채택해야 합니다. 기본적으로 여기에는 n번 포함된 집합의 데카르트 곱을 구성하는 작업이 포함됩니다.
접근 방식은 반복적입니다. n-1 데카르트 곱이 먼저 구성됩니다. 그런 다음 각 제품과 초기 세트의 각 요소에 대해 해당 요소가 제품에 추가됩니다. 예를 들어 문자 'a'와 'b'를 사용하여 모든 3자리 비밀번호를 생성한다고 가정해 보겠습니다.
다음 Go 함수 NAryProduct는 이 반복 구성을 구현합니다.
import ( "fmt" "strings" ) func NAryProduct(input string, n int) []string { if n <= 0 { return nil } prod := make([]string, len(input)) for i, char := range input { prod[i] = string(char) } for i := 1; i < n; i++ { next := make([]string, 0, len(input)*len(prod)) for _, word := range prod { for _, char := range input { next = append(next, word + string(char)) } } prod = next } return prod }
예 사용법:
fmt.Println(NAryProduct("abc", 3)) // [aaa aab aac aba abb abc aca acb acc baa bab bac bba bbb bbc bca bcb bcc]
제공된 솔루션은 이전에 계산된 세트의 재계산을 방지하여 더욱 최적화될 수 있습니다.
위 내용은 Go에서 가능한 모든 n-문자 비밀번호를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!