2010-09-12 52 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