2011-09-01 20 views
4

可能重複:
Generate all combinations of arbitrary alphabet up to arbitrary length如何在php中編寫所有可能的單詞?

我試圖讓寫在PHP 10個字母(ZZZZZZZZZZ)所有可能的話。我怎樣才能做到這一點?它會看起來像這樣:http://i.imgur.com/sgUnL.png

我試過一些方法,但他們只從10個字母隨機不增加1個字母。順便說一下,執行時間以及它的大小並不是問題。我只需要算法的話,如果有人用代碼它會更有幫助,當然表現出來..

+12

26^10種=可能性141 167 095 653 376,所以它可能需要一段時間。 –

+0

所有較低的罰款? – NullUserException

+0

@NullUserException這不是問題。 – xecute

回答

6

版本1:

for($s = 'a'; $s <= 'zzzzzzzzzz'; print $s++.PHP_EOL); 

如保羅在下面的評論指出,這隻會去zzzzzzzzyz。慢一點(如果有人問津),但正確的版本是:

//modified to include arnaud576875's method of checking exit condition 
for($s = 'a'; !isset($s[10]); print $s++.PHP_EOL); 
+0

令人印象深刻..這真的很有表現力。 @ arnaud576875的答案是函數中的函數。這是非常簡單和高效的答案,謝謝Mchl .. – xecute

+0

根據OP的問題,'$ s ='aaaaaaaaaa''可能是他想要的。 +1儘管如此,對於實際的最佳答案。 – netcoder

+2

這些都沒有你所期望的。 zz給出了zyz和aaaaaaaaaa只給出a的列表。 – Paul

7
function words($length, $prefix='') { 
    if ($length == 0) return; 
    foreach(range('a', 'z') as $letter) { 
     echo $prefix . $letter, "\n"; 
     words($length-1, $prefix . $letter); 
    } 
} 

用法:

words(10); 

嘗試在這裏:http://codepad.org/zdTGLtjY(文字最多3個字母)

+0

我喜歡第16549行的單詞:D – hoppa

0
<?php 

function makeWord($length, $prefix='') 
{ 
    if ($length <= 0) 
    { 
     echo $prefix . "\n"; 
     return; 
    } 

    foreach(range('a', 'z') as $letter) 
    { 
     makeWord($length - 1, $prefix . $letter); 
    } 
}  

// Use the function to write the words. 
$minSize = 1; 
$maxSize = 3; 

for ($i = $minSize; $i <= $maxSize; $i++) 
{ 
    makeWord($i); 
} 

?> 
相關問題