Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Saya Boleh Menjana Semua Kata Laluan Aksara N yang Berkemungkinan dengan Cekap dalam Go?

Bagaimanakah Saya Boleh Menjana Semua Kata Laluan Aksara N yang Berkemungkinan dengan Cekap dalam Go?

Barbara Streisand
Barbara Streisandasal
2024-11-23 06:57:11326semak imbas

How Can I Efficiently Generate All Possible N-Character Passwords in Go?

Penjanaan Kata Laluan Aksara n Berulang dalam Go

Dalam latihan pemecahan kata laluan, adalah penting untuk menjana semua kata laluan aksara n yang mungkin menggunakan set aksara yang ditentukan. Berikut ialah penyelesaian yang cekap dalam Go:

Menggunakan produk n-ary Cartesian, kami boleh membina kata laluan aksara n secara berulang. Contohnya, mencipta kata laluan 2 aksara daripada 'ABCDE':

Prod({A,B,C,D,E},{A,B,C,D,E}) = {(A,A),(A,B),(A,C),(A,D),(A,E),(B,A),(B,B),(B,C),(B,D),(B,E),...}
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
}

Dengan menggunakan kaedah ini secara rekursif, anda boleh menjana variasi kata laluan untuk sebarang set aksara dan panjang kata laluan. Pendekatan berulang ini memastikan penggunaan memori kekal rendah dan semua kata laluan yang berpotensi dikira dengan cekap.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjana Semua Kata Laluan Aksara N yang Berkemungkinan dengan Cekap dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn