在Go 中產生所有可能的n 字元密碼
使用Go 中給定集合中的字元產生指定長度的所有可能的密碼,需要用到n元笛卡爾積的概念。本質上,這涉及建構一個集合與其自身 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中文網其他相關文章!