穷尽集合之间的元素组合。
input: list of list
[ [‘a’, ‘b’, ‘c’], [‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’] , [‘A’, ‘B’, ‘C’, ‘D’] ]
output:
[
[‘a’, ‘1’, ‘A’],
[‘a’, ‘1’, ‘B’],
[‘a’, ‘1’, ‘C’],
[‘a’, ‘1’, ‘D’],
…
[‘c’, ‘6’, ‘D’]
]
实现下面的方法, 要求不要用递归的方法。
class CombinationProblem {
public ArrayList<ArrayList> getSetCombination(ArrayList<ArrayList> input) {
//TODO
return null ;
}
public static void main(String [] args) {
//TODO some test case
}
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class CombinationProblem {
public static ArrayList<ArrayList<String>> getSetCombination(ArrayList<ArrayList<String>> input) {
if (input == null || input.isEmpty() || input.size() == 1) {
return input;
}
ArrayList<ArrayList<String>> output = new ArrayList<ArrayList<String>>();
ArrayList<String> first = input.get(0);
for (int i = 1; i < input.size(); i++) {
first = combineTwo(first, input.get(i));
}
for (int i = 0; i < first.size(); i++) {
String[] a = first.get(i).split("");
ArrayList<String> t = new ArrayList<String>(Arrays.asList(a));
output.add(t);
}
return output;
}
public static ArrayList<String> combineTwo(List<String> a1, List<String> a2) {
ArrayList<String> combine = new ArrayList<>();
for (String s : a1) {
for (String m : a2) {
String a = s + m;
combine.add(a);
}
}
return combine;
}
public static void main(String [] args) {
ArrayList<String> a1 = new ArrayList<String>() {
{
add("a");
add("b");
add("c");
}
};
ArrayList<String> a2 = new ArrayList<String>() {
{
add("1");
add("2");
add("3");
}
};
ArrayList<String> a3 = new ArrayList<String>() {
{
add("A");
add("B");
add("C");
}
};
ArrayList<ArrayList<String>> input = new ArrayList<ArrayList<String>>();
input.add(a1);
input.add(a2);
input.add(a3);
System.out.println(getSetCombination(input));
}
}
运行结果:[[a, 1, A], [a, 1, B], [a, 1, C], [a, 2, A], [a, 2, B], [a, 2, C], [a, 3, A], [a, 3, B], [a, 3, C], [b, 1, A], [b, 1, B], [b, 1, C], [b, 2, A], [b, 2, B], [b, 2, C], [b, 3, A], [b, 3, B], [b, 3, C], [c, 1, A], [c, 1, B], [c, 1, C], [c, 2, A], [c, 2, B], [c, 2, C], [c, 3, A], [c, 3, B], [c, 3, C]]