package com.interview.recursion;
import java.util.ArrayList;
import java.util.List;
/**
* Date 07/20/2015
* @author Tushar Roy
*
* Given a list of list of Strings. Print cartesian product of lists.
* input -> {"Hello", "World"} , {"Game"}, {"Go","Home"}
* output ->
* Hello Game Go
* Hellow Game Home
* World Game Go
* World Game Home
*/
public class WordCombination {
public void printCombinations(List<List<String>> input) {
int[] result = new int[input.size()];
print(input,result, 0);
}
private void print(List<List<String>> input, int[] result, int pos) {
if(pos == result.length){
for (int i = 0; i < input.size(); i++) {
System.out.print(input.get(i).get(result[i]) + " ");
}
System.out.println();
return;
}
for(int i=0; i < input.get(pos).size(); i++){
result[pos] = i;
print(input,result, pos+1);
}
}
public static void main(String args[]){
List<String> l1 = new ArrayList<>();
l1.add("quick");
l1.add("slow");
List<String> l2 = new ArrayList<>();
l2.add("brown");
l2.add("red");
List<String> l3 = new ArrayList<>();
l3.add("fox");
l3.add("dog");
List<List<String>> input = new ArrayList<>();
input.add(l1);
input.add(l2);
input.add(l3);
WordCombination wc = new WordCombination();
wc.printCombinations(input);
}
}