有一个List对象,其中包含了n个List,这n个List中由包含不同数量的某种对象,每个List中的对象数量最少有一个,最多不限,如下的树型结构:
RootList--
          |_A List
                 |_A1
                 |_A2
          |_B List
                 |_B1
                 |_B2
                 |_B3
          |_C List
                 |_C1A 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
谁能有好的算法得到这个结果集合。

解决方案 »

  1.   

    import java.util.ArrayList;
    import java.util.List;
    public class Assembled {
    public static void main(String[] args){
    List a = new ArrayList();
    a.add("A1");
    a.add("A2");
    List b = new ArrayList();
    b.add("B1");
    b.add("B2");
    b.add("B3");
    List c = new ArrayList();
    c.add("C1");

    for(int i=0;i<a.size();i++){
    for(int j=0;j<b.size();j++){
    for(int k=0;k<c.size();k++){
    System.out.println( ""+(String)a.get(i)+" "+(String)b.get(j)+" "+(String)c.get(k) );
    }
    }
    }
    }
    }
      

  2.   

    A List、B List、C List都是同态的
      

  3.   

    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;
        }使用递归很方便,不过数据不可以太大!