组合问题升级再问高手
原问题:
有一个List对象,其中包含了n个List,这n个List中由包含不同数量的某种对象,每个List中的对象数量最少有一个,最多不限,如下的树型结构:
RootList--
|_A List
|_A1
|_A2
|_B List
|_B1
|_B2
|_B3
|_C List
|_C1
A List、B List、C List都是List,A1、A2、B1、B2、B3、C都是相同类的不同实例。
结果是从A List获取一个成员成员、从B List获取一个成员、从C List获取一个成员得到一个组合结果
这样不同下去,获得所有的组合,如上例子中的结果是:
A1 B1 C1
A1 B2 C1
A1 B3 C1
A2 B1 C1
A2 B2 C1
A2 B3 C1
谁能有好的算法得到这个结果集合。
字符串分组方法答案:
List getCombination(List a){
if(a.size()==1){
return (List) a.get(0);
}
List first=(List) a.get(0);
List left=getCombination(a.subList(1,a.size()));
List ret=new ArrayList();
for(int i=0;i<first.size();i++){
for(int j=0;j<left.size();j++){
ret.add(String.valueOf(first.get(i))+left.get(j));
}
}
return ret;
}
以上的方法可以解决字符串分组组合的问题,若将字符串换成对象,分组使用List,那就是返回的结果ret是包含多个List的嵌套List,而多个List中的一个就是一个分组,这样具体如何实现。