对于Java练习,我正在尝试编写一个类,该类在字符数组中生成所有字母组合,并将它们放入String数组中。 该对象应使用字符数组构建,并且应具有将int作为输入的方法。整数将确定组合应保留的时间。
例如,输入:
char[] charArray = { 'a', 'b' };
int k = 3;
输出:
[ "aaa", "aab", "aba", "abb", "baa", "bab", "bba", "bbb" ]
该方法应该是递归的,每次应使用k-1对其进行调用。
我尝试了一个简化版本,生成了一个带有所有下划线分隔的字符串,但是我没有得到想要的输出。
public String generate(int k) {
if (k == 0) return "_";
String s = "";
for (char c : charArray) {
s = s+c+generate(k-1);
}
return s;
}
我的输出是:
"aaa_b_ba_b_baa_b_ba_b_"
代替:
"aaa_aab_aba_abb_baa_bab_bba_bbb"
答案 0 :(得分:1)
尝试类似的方法(使用Java 8):
public String generate(String accumulator, int k) {
if (k == 0) return accumulator;
return Arrays.stream(stringArray).map(s -> generate(accumulator + s, k - 1)).collect(Collectors.joining("_"));
}
我只需要将char
的数组更改为String
的数组:
String[] stringArray = new String[]{ "a", "b" };
然后调用方法generate("", 3)
生成结果:
aaa_aab_aba_abb_baa_bab_bba_bbb
答案 1 :(得分:1)
您的方法还需要一个包含预值的参数。
您可以根据需要尝试以下代码段:
public static String generate(String prefix, int k) {
String s = "";
if (k == 0)
return prefix + "_";
for (char c : charArray) {
String newPrefix = prefix + c;
s = s + generate(newPrefix, k - 1);
}
return s;
}
此代码将生成"aaa_aab_aba_abb_baa_bab_bba_bbb_"
,因此您必须删除最后一个下划线。