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.
}