Комбинации значений n подмассивов в Java - PullRequest
3 голосов
/ 25 февраля 2012

Я хочу создать метод Java, который принимает inputArray = Object[n][], где n может быть любым целым числом, и выводит список возможных комбинаций размера n между всеми значениями n подмассивов.Ниже приведен пример:

Input Array: (где 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: Мне известны простые сообщения о комбинациях на сайте.

1 Ответ

6 голосов
/ 25 февраля 2012

Это должно решить вашу проблему.

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