2010-09-12 120 views
2

我记得这个具有特定的名称,并且在各种网站上有示例代码 - 但我不记得它实际上调用了什么,所以找不到任何东西...使用递归生成所有字母组合的算法

基本上,我想在循环中生成所有可能的字母组合。输出会是这样的:

A 
B 
C 
... 
Z 
AA 
AB 
AC 
--- 
AZ 
BA 
BB 
BC 

等等

+2

排列,我觉得你要搜索的关键词是排列。 – wheaties 2010-09-12 13:32:01

+2

@wheaties - 这些确实不是排列组合。 'A','BA'和'AZ'怎么可能是彼此的排列? – adamk 2010-09-12 13:36:24

+1

@adamk直到你编辑它,它就像他想要的排列组合。 – wheaties 2010-09-12 13:48:56

回答

2

试试这个(伪):

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) 
+0

谢谢,我试图移植到Java,但我不知道什么“对'在'A'到'Z''应该是? – Matt 2010-09-12 13:41:57

+0

@Matt:这意味着'c'应该覆盖字母'A'到'Z'。在Java中,您可以使用常规的'for'循环来实现此目的。 – Stephan202 2010-09-12 13:43:42

+0

那么这是正确的吗? String [] chars = {“a”,“b”,“c”}; 为(串c:字符){ – Matt 2010-09-12 13:44:42

4

从数学上讲,你正在寻找的拼音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); 
} 
+0

这是一个不错,干净的代码,但结果比在问题返回以不同的顺序(和adamk的回答)。我无法从这个问题了解结果的顺序是否重要。 – Bolo 2010-09-13 07:07:09