我记得这个具有特定的名称,并且在各种网站上有示例代码 - 但我不记得它实际上调用了什么,所以找不到任何东西...使用递归生成所有字母组合的算法
基本上,我想在循环中生成所有可能的字母组合。输出会是这样的:
A
B
C
...
Z
AA
AB
AC
---
AZ
BA
BB
BC
等等
我记得这个具有特定的名称,并且在各种网站上有示例代码 - 但我不记得它实际上调用了什么,所以找不到任何东西...使用递归生成所有字母组合的算法
基本上,我想在循环中生成所有可能的字母组合。输出会是这样的:
A
B
C
...
Z
AA
AB
AC
---
AZ
BA
BB
BC
等等
试试这个(伪):
function loop(prefix, max_length):
for c in 'A' to 'Z':
print prefix + c
for c in 'A' to 'Z':
if length(prefix) < max_length:
loop(prefix + c, max_length)
loop('', 2)
谢谢,我试图移植到Java,但我不知道什么“对'在'A'到'Z''应该是? – Matt 2010-09-12 13:41:57
@Matt:这意味着'c'应该覆盖字母'A'到'Z'。在Java中,您可以使用常规的'for'循环来实现此目的。 – Stephan202 2010-09-12 13:43:42
那么这是正确的吗? String [] chars = {“a”,“b”,“c”}; 为(串c:字符){ – Matt 2010-09-12 13:44:42
从数学上讲,你正在寻找的拼音cartesian power。
提供的递归adamk是正确的,但你可以把它简化一点:
void printAllLetterSequences(String prefix, int length) {
System.out.println(prefix);
if (prefix.length() < length)
for (char c = 'A'; c <= 'Z'; c++)
printAllLetterSequences(prefix + c, length);
}
这是一个不错,干净的代码,但结果比在问题返回以不同的顺序(和adamk的回答)。我无法从这个问题了解结果的顺序是否重要。 – Bolo 2010-09-13 07:07:09
排列,我觉得你要搜索的关键词是排列。 – wheaties 2010-09-12 13:32:01
@wheaties - 这些确实不是排列组合。 'A','BA'和'AZ'怎么可能是彼此的排列? – adamk 2010-09-12 13:36:24
@adamk直到你编辑它,它就像他想要的排列组合。 – wheaties 2010-09-12 13:48:56