3

inputArray = Object[n][]を受け入れ、 n は任意の整数であり、n 個の部分配列のすべての値の間で可能な n サイズの組み合わせのリストを出力するJava メソッドを作成したいと考えています。以下に例を示します。

入力配列: (Object=String および n=3)

String[] subarrayA = {"A0","A1","A2"};
String[] subarrayB = {"B0","B1"};
String[] subarrayC = {"C0","C1","C2","C3"};
String[3][] inputArray = {subarrayA, subarrayB, subarrayC};

望ましい出力:

{A0,B0,C0},{A0,B0,C1},{A0,B0,C2},{A0,B0,C3},
{A0,B1,C0},{A0,B1,C1},{A0,B1,C2},{A0,B1,C3},
{A1,B0,C0},{A1,B0,C1},{A0,B0,C2},{A1,B0,C3},
{A1,B1,C0},{A1,B1,C1},{A1,B1,C2},{A1,B1,C3},
{A2,B0,C0},{A2,B0,C1},{A2,B0,C2},{A2,B0,C3},
{A2,B1,C0},{A2,B1,C1},{A2,B1,C2},{A2,B1,C3}

n明らかに、事前にわからないため、メソッド内にネストされたループを固定することはできません。だから、それを解決する唯一の方法は再帰的な方法だと思いますか? 推奨事項はありますか?

PS: Web サイトに単純な組み合わせに関する投稿があることは承知しています。

4

1 に答える 1

6

これで問題が解決するはずです。

public static void permute(String array[][], int index, ArrayList<String> output){

    if(index == array.length){
        System.out.println(output.toString());
    }
    else{
        for(int i=0 ; i<array[index].length ; i++){
            output.add(array[index][i]);
            permute(array,index+1,output);
            output.remove(output.size() - 1); 
        }
    }
}
于 2012-02-25T18:59:16.627 に答える