我試圖找到一種方法來確定所有可能的單詞,可以拼出一個給定的數字,給定的字母值的映射。算法查找拼寫出的數字
我最終希望找到適用於字母的任意1或2位數值映射的解決方案,但爲了說明,假設A = 1,B = 2,... Z = 26。
示例:12322
可以等於abcbb (1,2,3,2,2)
,lcbb (12,3,2,2)
,awbb (1,23,2,2)
,abcv (1,2,3,22)
,awv (1,23,22)
,或lcv (12,3,22)
。
這是我想到的迄今:
我將建成使用數字的所有可能的話一棵樹。
要做到這一點,我將從一個帶有一個根節點的樹開始,使用虛擬數據。
我將從最低有效位數字開始逐個解析數字。
在每一步中,我將把剩餘部分的最後一位數字插入到當前節點的左側子樹中,並從該節點的左側子樹的數字中刪除該數字。對於同一個節點,我將檢查前面的兩個數字是否構成一個有效的字母表,如果是,我將把它們放入正確的子樹(並從該節點的右側子樹的數字中除去2個數字)。
然後,我將使用剩餘數字的一部分遞歸地爲每個節點重複上述步驟,直到沒有更多數字剩下爲止。
爲了說明,對於12322
我的樹會是這個樣子:
*
/ \
/ \
2 22
/ / \
2 3 23
/ \ /\ /
3 23 2 12 1
/\ //
2 12 1 1
/
1
要得到的話,然後,我會遍歷從葉子中所有可能的路徑爲節點。
這似乎是什麼,我認爲將是一個相當簡單的問題過於複雜的解決方案,我試圖找出是否有解決這個簡單的方法。
(12,3,22)應該是lcv – pierrotlefou 2009-10-27 01:42:48
謝謝!糾正。 – hexium 2009-10-27 01:49:25