求个算法,这要怎么做
求各位给个算法,这要如何去做(不要for嵌套)
问题是这样:现有五个左右的list集合,每个集合的大小不确定有可能size为0,现想得到把每个集合里的数据进行排列组合后的数据。
如图:
现在得到
ADG
ADH
ADI
AEG
AEH
AEI
......
肯请各位请教下要如何去做? 算法 行业数据 排列组合
[解决办法]
递归
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Hello {
private static List<String> result = new ArrayList<String>();
public static void foo(List<List<String>> lists, int outerIndex) {
if (result.size() == lists.size()) {
System.out.println(result);
}
for (int oi = outerIndex; oi < lists.size(); ++oi) {
List<String> temp = lists.get(oi);
for (int ii = 0; ii < temp.size(); ++ii) {
result.add(temp.get(ii));
foo(lists, oi + 1);
result.remove(result.size() - 1);
}
}
}
public static void main(String[] args) {
// [[[1]]] 准备数据.
List<String> l1 = new ArrayList<String>();
List<String> l2 = new ArrayList<String>();
List<String> l3 = new ArrayList<String>();
List<String> l4 = new ArrayList<String>();
l1.add("A");
l1.add("B");
l1.add("C");
l2.add("D");
l2.add("E");
l2.add("F");
l3.add("G");
l3.add("H");
l3.add("I");
// [[[2]]] 把上面的list都加入到list里
List<List<String>> lists = new ArrayList<List<String>>();
lists.add(l1);
lists.add(l2);
lists.add(l4);
lists.add(l3);
// [[[3]]] 去掉空的list
Iterator<List<String>> iter = lists.iterator();
while (iter.hasNext()) {
List<String> temp = iter.next();
if (temp.size() == 0) {
iter.remove();
}
}
// [[[4]]] 递归函数.
foo(lists, 0);
}
}
[A, D, G]
[A, D, H]
[A, D, I]
[A, E, G]
[A, E, H]
[A, E, I]
[A, F, G]
[A, F, H]
[A, F, I]
[B, D, G]
[B, D, H]
[B, D, I]
[B, E, G]
[B, E, H]
[B, E, I]
[B, F, G]
[B, F, H]
[B, F, I]
[C, D, G]
[C, D, H]
[C, D, I]
[C, E, G]
[C, E, H]
[C, E, I]
[C, F, G]
[C, F, H]
[C, F, I]