有一个外层list1,这个list1里面有未知个list,而每一个list里面的元素个数有也是未知的,怎么算出各种可能性
例子:比如说3个内层list(list1,list2,list3)
list1(1,2)//内层的元素不一定是2个
list2(3,4)
list4(5,6)
算出来的可能性有6种(2*2*2),分别为135,136,145,146,235,236,245,246
  
例子:      
List list=new ArrayList();
        List<String> list1=new ArrayList<String>();
        List<String> list2=new ArrayList<String>();
        List<String> list3=new ArrayList<String>();
        list1.add("1");
        list1.add("2");
        list1.add("3");        list2.add("4");
        list2.add("5");        list3.add("6");
        list3.add("7");
        list3.add("8");        list.add(list1);
        list.add(list2);
        list.add(list3);
输出 146,147,148,156,157,158,246,247,248,256,257,258,346,347,348,356,357,358

解决方案 »

  1.   


    public void  loop(ArrayList<Object> list){
    for(int i=0;i<list.length();i++){
    if(list[i] instanceof Arraylist){
    loop(list[i])
    }
    else{
    System.out.println(list[i])
    }
    }
    }
      

  2.   

    未知个list是什么概念.  list总能拿到长度吧.. 
      

  3.   

    public static void outlist(List<List<String>> list,int i,int max,String x,String[] zf,List<String> results) {
            if (i < max) {
                for(int y=0;y<list.get(i).size();y++){
                    zf[i]=list.get(i).get(y);//获取每一层的元素的值
                    outlist(list,i+1,max,x,zf,results);//递归创建for循环
                    if(i==(max-1)){//最后一层循环
                        for (String s : zf) {
                            x+=s;
                        }
                        //System.out.println(x);
                        results.add(x);
                        x="";
                    }
                }
            }
            //return x;
        }
      

  4.   

    如果只有两层结构,对应使用两层循环就可以实现。
    如果可能有n层结构,就必须用递归。递归的临界条件要对本层list进行遍历,并对其元素进行instanceof检查,直到其类型不是List时,认为找到最后一层,输出结果。