整个夏天,我决定编写一个程序,通过使用你输入的单词中所有可能的字母组合来解决字谜问题。我设法做到了这一点,但它可以快速解决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
答案 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)
等等。当它变为单个字符串时,所有可能的排列都只是那个单个字符。