我需要有人向我解释字符串的排列

时间:2014-02-16 23:39:31

标签: vb.net

整个夏天,我决定编写一个程序,通过使用你输入的单词中所有可能的字母组合来解决字谜问题。我设法做到了这一点,但它可以快速解决3-4个字母,但更多的东西,这需要很长时间!无论如何,在询问其他网站寻求帮助后,一些人/女孩通过为我编写一些代码来解决我的问题。

当时我不理解它,即使它已被注释,我今天又看了一眼,看看我是否可以从中得到任何东西但是唉,没什么......

我现在一直在研究排列大约2个小时而且我无处可去 - 代码在互联网上,但没有人能够很好地解释它(或者说够了)让我掌握这个概念。我将在下面发布我还没有理解的代码,如果有人能详细解释这个以及它是如何工作的那么它会很棒!

Public Sub permutations(ByVal WordLength As Integer, ByVal SplitLetters As List(Of Char), ByVal word As String)

    If WordLength = 1 Then
        results.Add(word & SplitLetters(0))   
        count += 1                            

        If count Mod updateCount = 0 Then
            ldBar.Value = ((count / pCombinations) * 100)
        End If
    Else

        For i = 0 To WordLength - 1

            Dim newWord = word & SplitLetters(i)

            Dim newSplitLetters As List(Of Char) = New List(Of Char)(SplitLetters)
            newSplitLetters.RemoveAt(i)
            Call permutations(WordLength - 1, newSplitLetters, newWord)
        Next i
    End If
End Sub

1 个答案:

答案 0 :(得分:2)

该方法通过使用递归来获取所有排列。

给定一个单词,例如FUBAR,它依次使用每个字符作为第一个字符,并通过组合来获得所有可能的排列,这将是剩余字符的所有排列:

F + permutatons(UBAR)
U + permutatons(FBAR)
B + permutatons(FUAR)
A + permutatons(FUBR)
R + permutatons(FUBA)

对于第一个递归调用,它获取以每个字符开头的所有排列:

U + permutatons(BAR)
B + permutatons(UAR)
A + permutatons(UBR)
R + permutatons(UBA)

等等。当它变为单个字符串时,所有可能的排列都只是那个单个字符。