2014-02-16 52 views
0

在今年夏天,我決定編寫一個程序,通過使用您輸入的單詞中所有可能的字母組合來解決字謎。我設法做到了這一點,但它可以快速解決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 

回答

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) 

依此類推。當它歸結爲單個字符串時,所有可能的排列組合就是單個字符。