【问题标题】:Algorithm to generate all letter combinations using recursion使用递归生成所有字母组合的算法
【发布时间】:2012-08-30 02:15:53
【问题描述】:

我记得它有一个特定的名称,并且在各种网站上都有示例代码 - 但我不记得它实际上叫什么,所以找不到任何东西......

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

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

等等……

【问题讨论】:

  • 排列,我认为您要搜索的关键词是排列。
  • @wheaties - 这些真的是 not 排列。 “A”、“BA”和“AZ”怎么可能是彼此的排列?
  • @adamk 在你编辑之前,它读起来就像他想要排列。

标签: java


【解决方案1】:

从数学上讲,您正在寻找字母表中的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);
}

【讨论】:

  • 这是一个很好、干净的代码,但结果的返回顺序与问题(和亚当克的答案)不同。我无法从这个问题中理解结果的顺序是否重要。
【解决方案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 )

【讨论】:

  • 谢谢,我正在尝试将其移植到 Java,但我不确定“for c in 'A' to 'Z'”应该是什么?
  • @Matt:这意味着c 应该在字母A 到Z 的范围内。在 Java 中,您可以为此使用常规的 for 循环。
  • 这样对吗?字符串[] 字符 = {"a", "b", "c"}; for (String c : chars) {
  • for (char c = 'A'; c
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-15
  • 2012-04-26
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
  • 2012-03-22
  • 1970-01-01
相关资源
最近更新 更多