2017-10-15 25 views
1

Javaを使用して次の問題に取り組んでいます。私はこの記事の最後に私のコードを入れます。私はほとんどの組み合わせを取得しますが、すべての組み合わせを取得するのに役立つ再帰呼び出しの残りの部分で、列変数を0にする方法を見つけることができません。ソリューションは、すべてのサイズの2次元配列に対して機能する必要があります。私は、ソリューションが完全に再帰することが望ましいと思います。ループはありません。あなたが提供する可能性のある何らかの洞察をありがとう。ような2次元配列の定義は、以下を考える2次元配列の可能な組み合わせを見つける

String[][] data = { 
{"A", "B"}, 
{"1", "2"}, 
{"XX","YY","ZZ"} 
}; 

順に各サブアレイの全ての組み合わせを出力する再帰的なプログラムを書きます。前の例では、希望の出力は次のようになります。

A 1 XX 
A 1 YY 
A 1 ZZ 
A 2 XX 
A 2 YY 
A 2 ZZ 
B 1 XX 
B 1 YY 
B 1 ZZ 
B 2 XX 
B 2 YY 
B 2 ZZ 

プログラムは、いずれかの次元で任意のサイズの配列で動作する必要があります。出力

String[][] data = { 
{"A"}, 
{"1"}, 
{"2"}, 
{"XX","YY"} 
}; 

する必要があります:これまで

A 1 2 YY 
A 1 2 YY 

マイソリューション:あなたは次の行に移動すると

private String[][] data = { 
     {"A", "B"}, 
     {"1", "2"}, 
     {"XX","YY","ZZ"} 
}; 

public void combinations() { 
    helperMethod("",0, 0); 
} 

private void helperMethod(String oldCombination, int row, int col) { 
    String newCombination = oldCombination + data[row][col]; 

    if (row == data.length - 1) { 
     System.out.println(newCombination); 
    } 

    if (row < data.length - 1) { 
     helperMethod(newCombination, row + 1, col); 
    } 

    if (col < data[row].length - 1) { 
     helperMethod(oldCombination, row, col + 1); 
    } 
} 

答えて

0

、あなたがリセットする必要がたとえば、以下の入力配列を考えます0に戻す列:

if (row < data.length - 1) { 
    helperMethod(newCombination, row + 1, 0); // 0 instead of col 
} 

小さな変更で、あなたが提供したテストケースでは、少なくとも正しく動作しているようです。

関連する問題