我記得這個具有特定的名稱,並且在各種網站上有示例代碼 - 但我不記得它實際上調用了什麼,所以找不到任何東西...使用遞歸生成所有字母組合的算法
基本上,我想在循環中生成所有可能的字母組合。輸出會是這樣的:
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