可变字母排列算法 - 简单但令人难以置信

时间:2014-09-19 09:48:59

标签: algorithm

我最近遇到了一个显然很简单的问题,但事实证明这让我无法入睡2天。

问题在于:

变量将包含多个字符 - >假设$ i = 5。您需要打印从$ i = 2到$ i = 5的每个可能的字母组合。

$ i = 5的输出需要是: 的 AA AB AC ... Z Z AAA AAB ... ZZZ AAAA AAAB .... ZZZZ AAAAA ..... ZZZZZ

您需要使用仅用于循环 foreach while循环来实现此功能(不使用任何功能)并打印输出对于形成的每个字符串而不是保存在数组中。 请不要在for循环内部使用for循环,因为$ i可以是100或200。

您可以从'a'到'z'获取一系列字母表。有人可以帮我解决一个简单优雅的解决方案吗?

1 个答案:

答案 0 :(得分:1)

在循环之前,你有一个数组aa。在循环中查看数组。

如果数组是所有z的序列,则将所有a的序列替换为内容,其长度增加1.如果新数组的长度大于最大值,则退出循环

否则请查看数组的尾部,它始终采用Xz*形式,其中X是除z之外的任何字母,后跟零个或多个字母{{1} }。将数组的尾部替换为z,其中Ya*Y后面的字母,即。 Y = X + 1,X是字母a*的序列,其长度与原始字母序列a完全相同(请记住长度可以为零)。

在任何情况下都要写入数组的新内容以输出并重复循环。

你只需要两个循环。外部是在每次迭代中打印新值的主循环。 Inner是将所有z转换为z的循环。