【问题标题】:How write all possible words in php? [duplicate]如何在php中写出所有可能的单词? [复制]
【发布时间】:2011-11-08 09:08:25
【问题描述】:

可能重复:
Generate all combinations of arbitrary alphabet up to arbitrary length

我正在尝试在 php 中编写所有可能的 10 个字母 (zzzzzzzzzz) 的单词。我怎样才能做到这一点?它看起来像这样:http://i.imgur.com/sgUnL.png

我尝试了一些方法,但它们只随机生成 10 个字母,而不是从 1 个字母增加。顺便说一句,执行时间和它的大小都不是问题。我只需要对其进行算法,如果有人用代码显示它当然会更有帮助..

【问题讨论】:

标签: php arrays letter


【解决方案1】:
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 个字母)

【讨论】:

  • 我喜欢第 16549 行中的单词:D
【解决方案2】:

版本 1:

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

正如 Paul 在下面的 cmets 中所指出的,这只会发送到 zzzzzzzzyz。慢一点(如果有人关心的话),但正确的版本是:

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

【讨论】:

  • 令人印象深刻.. 这真的很有表现力。 @arnaud576875 的答案是功能中的功能。这是一个非常简单而有效的答案,谢谢 Mchl ..
  • 根据 OP 的问题,$s = 'aaaaaaaaaa' 可能是他想要的。 +1 尽管如此,以获得实际的最佳答案。
  • 这些都不符合您的预期。 zz 给出了一个去 zyz 的列表,而 aaaaaaaaaa 只给出了一个。
  • 第二个使用 !isset($s[10]) 而不是 strlen($s) &lt;= 10 快 4 倍(如果有人关心的话)
【解决方案3】:
 <?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);
}

?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-21
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    相关资源
    最近更新 更多