Java 递归函数,以数组形式返回结果
如何将此函数更改为将字符串[][]作为返回类型,并返回可能的组合数组,而不只是打印找到的组合Java 递归函数,以数组形式返回结果,java,Java,如何将此函数更改为将字符串[][]作为返回类型,并返回可能的组合数组,而不只是打印找到的组合 static void combinations2(String[] arr, int len, int startPosition, String[] result){ if (len == 0){ System.out.println(Arrays.toString(result)); return; } for (int i = startP
static void combinations2(String[] arr, int len, int startPosition, String[] result){
if (len == 0){
System.out.println(Arrays.toString(result));
return;
}
for (int i = startPosition; i <= arr.length-len; i++){
result[result.length - len] = arr[i];
combinations2(arr, len-1, i+1, result);
}
}
应该回来
{ { "Value1", "Value2" }, {"Value1", "Value3"}, {"Value2", "Value3"} }
你可以做:
static void combinations2(String[] arr, int len, int startPosition, String[] result, String[][] allResults){
if (len == 0){
//Add result to allResults here
return;
}
for (int i = startPosition; i <= arr.length-len; i++){
result[result.length - len] = arr[i];
combinations2(arr, len-1, i+1, result);
}
}
foo() {
String[][] allResults = new String[][];
combinations2(...);
//allResults now holds all the String[].
//No return statement necessary since arrays, like all Java objects, are passed as references.
}
但是您最好将allResults作为ArrayList使用。您没有可以从该方法返回的字符串[][]。首先,您必须更改返回类型。第二你想在返回的数组中填充什么?在哪里打印找到的组合?@Andrew返回的数组应该包含一个数组,作为数组的arr原始内容的可能组合。为了更好地理解,我在OP中添加了一个如何调用该方法/应返回什么的示例。我应该如何添加每个示例是否将结果添加到allResults数组?我认为您的示例中缺少了一些东西,因为数组是通过引用传递的——Java纯粹是通过值传递的。我建议你删掉那句话,或者修改它。@R.J:是的,我重新措辞了。这种区别总是让我感到惊讶:@Zulakis:这就是我建议使用ArrayList的原因。使用阵列时,您必须提前知道需要多少空间。省去麻烦,使用ArrayList。如果绝对必须使用数组,则每次当前数组的空间不足时,都可以将内容复制到更大的数组中。将方法与ArrayList一起使用只会返回相同的组合3次。请参见此处两种方法的示例:
static void combinations2(String[] arr, int len, int startPosition, String[] result, String[][] allResults){
if (len == 0){
//Add result to allResults here
return;
}
for (int i = startPosition; i <= arr.length-len; i++){
result[result.length - len] = arr[i];
combinations2(arr, len-1, i+1, result);
}
}
foo() {
String[][] allResults = new String[][];
combinations2(...);
//allResults now holds all the String[].
//No return statement necessary since arrays, like all Java objects, are passed as references.
}