带前缀

时间:2018-09-23 06:35:58

标签: java recursion

我有一个递归ABC生成器方法。

public static void ABCgenerator(String from, int letters) {
        if (from.length() == letters) {
            System.out.println(from);
        } else {
            ABCgenerator(from + "a", letters);
            ABCgenerator(from + "b", letters);
            ABCgenerator(from + "c", letters);
        }
    }

当我使用这些参数ABCgenerator("a", 3);运行它时,它会给我:

aaa
aab
aac
aba
abb
abc
aca
acb
acc

相反,我想在运行ABCgenerator("a", 3);时获得以下信息:

aaaa
aaab
aaac
aaba
aabb
aabc
aaca
aacb
aacc
abaa
abab
abac
abba
abbb
abbc
abca
abcb
abcc
acaa
acab
acac
acba
acbb
acbc
acca
accb
accc

要注意的是,只允许我更改方法的主体

输入参数的类型和数量必须保持不变,即1个字符串+ 1个整数。

该方法必须保持递归。

我该怎么做?

编辑:

使用ABCgenerator("", 3);

它必须给出:

aaa
aab
aac
aba
abb
abc
aca
acb
acc
baa
bab
bac
bba
bbb
bbc
bca
bcb
bcc
caa
cab
cac
cba
cbb
cbc
cca
ccb
ccc

1 个答案:

答案 0 :(得分:0)

public static void ABCgenerator(String from, int lettersLeft) {
        lettersLeft--;
        if (lettersLeft + 1 == 0) {
            System.out.println(from);
        } else {
            ABCgenerator(from + "a", lettersLeft);
            ABCgenerator(from + "b", lettersLeft);
            ABCgenerator(from + "c", lettersLeft);
        }
    }
}

这是正确的解决方案。我们不是在每次计算输入字符串的整个长度,而是在计算该函数仍然需要生成多少个字母,当该函数达到零时,“最后一个”实例将不会调用其他实例而只打印结果。我想要一种能够生成具有给定长度和固定前缀的字母a b c的所有组合的方法,它就是这样。它提供了示例中提供的所需输出。