Wydrukuj wszystkie możliwe kombinacje liczby „X” znaków z długością ciągu „X” (Brute Force)

Próbuję napisać generator kombinacji słów, mam na myśli wydrukować wszystkie możliwe kombinacje liczby „X” znaków o długości łańcucha „X”,

Przede wszystkim muszę powiedzieć, że widziałem pytanie w StackOverFlow o dokładnie tym problemie, który zawiera wiele odpowiedzi generatorów słów, aby zrobić to dokładnie (w różnych językach), ale proszę, nie zaznaczaj tego jako duplikat lub nie skomentuj moje pytanie tylko po to, by odwołać się do mnie - ten link, ponieważ przetestowałem WSZYSTKIE kody C # i VBNET tego pytania i naprawdę żaden nie działa w 100% zgodnie z oczekiwaniami, zobacz kombinacje, których potrzebuję:

Na przykład, jeśli mam znaki „a”, „b” i „c” i chcę, aby wszystkie kombinacje tych znaków były ciągiem o długości „3”, jest to wynik, którego oczekuję:

' Expected result, 27 combinations:
'
' aaa
' aab
' aac
'
' aba
' abb
' abc
'
' aca
' acb
' acc
'
' baa
' bab
' bac
'
' bba
' bbb
' bbc
'
' bca
' bcb
' bcc
'
' caa
' cab
' cac
'
' cba
' cbb
' cbc
'
' cca
' ccb
' ccc

(Rodzaj nie ma znaczenia, mogę to posortować później.)

... Ale jak dotąd tego oczekiwanego rezultatu mogę uzyskać:

'a
'aa
'aaa
'b
'bb
'bbb
'c
'cc
'ccc

Zrobiłem to teraz w dwóch językach (Ruby i Batch), ale używając zagnieżdżonych Fors (wiele Fors razem dla każdego Do dołączenia tylko jednej litery do drugiej Do wyjścia), oczywiście Jeśli próbuję to zrobić w VBNET, to aby uniknąć pozwu wielu Fors i zrobić to w lepszy sposób.

W poniższym kodzie możesz zobaczyć, jak próbuję przydzielić wszystkie kombinacje w pamięci RAM (tablicę) zamiast zapisywać je na dysku fizycznym, więc chcę napisać ten kod za pomocą metody logicznej iw sposób bardziej wydajny, a następnie Chcę najpierw zapisać wszystkie kombinacje „w pamięci” i dlatego też nie chcę używać wielu forów (wydajność).

To była moja ostatnia próba, wszystko zostało wyjaśnione w komentarzach:

Public Class Form1

    Dim characters As Char()  ' Default value: {"a","b","c"}
    Dim StringLength As Int64 ' Default value: 3
    Dim TotalCombinations As Int64 ' Default value: 27
    Dim strarray(99999999) As String ' Default size: "99.999.999" million of combinations in memory (I need to confirm this from an expert).

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    Dim index As Int64 = 0

    For column As Int64 = 0 To TotalCombinations - 1 ' For 0 to 26

        For Each character As Char In characters ' Characters = {"a","b","c"}

            If column < index Then
                index = 0 ' I reset index value 'cause... just experimenting things.
                Try
                    strarray(index) += characters(index)
                    RichTextBox1.Text += strarray(index) & ControlChars.NewLine
                Catch
                End Try
            Else
                Try
                    strarray(index) += characters(index)
                    RichTextBox1.Text += strarray(index) & ControlChars.NewLine
                Catch
                End Try
            End If
        Next

        index += 1

    Next

    End Sub

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        characters = sender.text.ToCharArray ' Result: {"a","b","c"}
        Calculate_Combinations() ' Result: 27
    End Sub

    Private Sub NumericUpDown1_ValueChanged(sender As Object, e As EventArgs) Handles NumericUpDown1.ValueChanged
        StringLength = sender.value ' Result: 3
        Calculate_Combinations() ' Result: 27
    End Sub

    Private Sub Calculate_Combinations()
        Try
            TotalCombinations = ((characters.LongLength * StringLength) * StringLength) ' Result: 27
            Label1.Text = ((characters.LongLength * StringLength) * StringLength) & " number of combinations." ' Result: 27
        Catch : End Try
    End Sub

End Class

Dokładna pomoc.

questionAnswers(2)

yourAnswerToTheQuestion