无论数组大小如何,Java 多数组递归

Jos*_*osh 5 java arrays recursion

我有三个数组:

{}    
{a, b, c}
{d, e} 
Run Code Online (Sandbox Code Playgroud)

我正在尝试将它们组合起来以获得以下数组:

{a, d}
{a, e}
{b, d}
{b, e}
{c, d} 
{c, e}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是第一个空数组导致嵌套的 for 循环根本无法运行 - 从逻辑上讲是有道理的。IE:

 for (int i = 0; i < bL.size(); i++) {
        for (int j = 0; j < dL.size(); j++) {
            for (int k = 0; k < oL.size(); k++) {
Run Code Online (Sandbox Code Playgroud)

我试图找到的是组合三个数组的最有效方法,而不管它们的大小。大多数情况下,这三个元素都有元素,但在某些情况下可能会生成一个空集。

任何帮助表示赞赏。

编辑:为所有三个数组添加输出

输入 - {a,b} {c,d} {e,f}

输出 - {a,c,e} {a,c,f} {a,d,e} {a,d,f} {b,c,e} {b,c,f}

编辑:只有第一个或第三个数组可能导致空集

das*_*ght 0

假设您正在遍历int值数组,您可以执行以下操作:

void printCombination(int[][] data, List<int> partial) {
    if (partial.size() == data.Length) {
        for (int i : partial) {
            if (i != -1) {
                System.out.writeln(" " + i);
            }
        }
        return;
    }
    if (data[partial.size()].length == 0) {
        partial.add(-1);
        printCombination(data, partial);
        partial.remove(partial.size()-1);
        return;
    }
    for (int i = 0 ; i != data[partial.size()].length; i++) {
        partial.add(data[partial.size()][i]);
        printCombination(data, partial);
        partial.remove(partial.size()-1);
    }
}
Run Code Online (Sandbox Code Playgroud)

初始调用如下所示:

List<int> partial = new ArrayList();
int[][] data = new int[][] {new int[] {}, new int[] {1,2}, new int[] {3, 4, 5}};
printCombination(data, partial);
Run Code Online (Sandbox Code Playgroud)