首頁 > 後端開發 > Golang > 如何在 Go 中產生所有可能的 n 字元密碼?

如何在 Go 中產生所有可能的 n 字元密碼?

Linda Hamilton
發布: 2024-11-23 22:25:14
原創
416 人瀏覽過

How to Generate All Possible n-Character Passwords in Go?

在Go 中產生所有可能的n 字元密碼

使用Go 中給定集合中的字元產生指定長度的所有可能的密碼,需要用到n元笛卡爾積的概念。本質上,這涉及建構一個集合與其自身 n 次的笛卡爾積。

此方法是迭代的。首先構造 n-1 笛卡爾積。然後,對於每個產品和初始集合的每個元素,該元素被添加到產品中。例如,考慮使用字元'a' 和'b' 產生所有3 個字元密碼:

  • {'a', 'b'} 的1 字元笛卡爾積為{ 'a', 'b '}。
  • 2 字符笛卡爾積為{('a', 'a'), ('a', 'b'), ('b', 'a'), ('b', 'b ')}.
  • 3 字符笛卡爾積為{('a', 'a', 'a'), ('a', 'a', 'b'), ('a', 'b', 'a'), ('a', 'b', 'b'), ('b', 'a', 'a'), ('b', 'a', 'b') , ('b', 'b', 'a'), ('b' ', 'b', 'b')}.

下面的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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板