一下代码是
第一个List 11 22    存放两个元素
第二个List 33 44 55 存放三个元素
第三个List 66 77    存放两个元素排列后应该是 2*3*2=12种情况
113366
113377
114466
114477
115566
115577
223366
223377
224466
224477
225566
225577 public static void main(String[] args){
List<String> ls1=new ArrayList<String>();
String str1="11"; String str2="22";
ls1.add(str1);ls1.add(str2);

List<String> ls2=new ArrayList<String>();
String str3="33";String str4="44";String str5="55";
ls2.add(str3);ls2.add(str4);ls2.add(str5);
 
List<String> ls3=new ArrayList<String>();
String str6="66";String str7="77";
ls3.add(str6);ls3.add(str7);

for(int i=0;i<ls1.size();i++){
String s1=ls1.get(i);
for(int j=0;j<ls2.size();j++){
String s2=ls2.get(j);
for(int k=0;k<ls3.size();k++){
String s3=ls3.get(k);
System.out.println(s1+s2+s3);
}
}
}
}此时的情况用三个for循环就解决问题了 
        问题来了,如果是N个小List第一个List 11 22     存放两个元素
第二个List 33 44 55  存放三个元素
第三个List 66 77     存放两个元素
第四个List 88 99     存放两个元素
第N个 List **  ** **   存放N个元素  
  
         意思是这个List是不确定的,是动态的  怎么算排列情况??
 

解决方案 »

  1.   

    每个List中的个数相乘,然后减掉重复的项的个数
      

  2.   


    import java.util.ArrayList;
    import java.util.List;public class Test {
    public static void main(String args[]) {
    Test t = new Test();
    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("11");
    l1.add("12");
    l1.add("13");
    l2.add("21");
    l2.add("22");
    l2.add("23");
    l3.add("31");
    l3.add("32");
    l3.add("33");
    l4.add("41");
    l4.add("42");
    l4.add("43"); List<List<String>> list = new ArrayList<List<String>>();
    list.add(l1);
    list.add(l2);
    list.add(l3);
    list.add(l4);
    List<String> result = t.printList(list);
    System.out.println(result);
    } private List<String> printList(List<List<String>> list) {
    if (list.size() <= 1)
    return list.get(0); List<String> tmp = new ArrayList<String>();
    for (String s1 : list.get(0)) {
    for (String s2 : list.get(1)) {
    tmp.add(s1 + s2);
    }
    }
    list.remove(1);
    list.remove(0);
    list.add(0, tmp);
    return printList(list);
    }
    }
      

  3.   


    意思是这个List是不确定的,是动态的 怎么算排列情况??
    ======
    应该是这堆list是不确定的吧那你怎么传参数呢。。如果有这需要,,用递归如何。。想想。。在想。
      

  4.   

    import java.util.ArrayList;
    import java.util.List;public class Test { /**
     * @param args
     */
    public static void main(String[] args) {
            Test t = new Test();
         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("11");
            l1.add("12");
            l1.add("13");
            l2.add("21");
            l2.add("22");
            l2.add("23");
            
            l3.add("31");
            l3.add("32");
            l3.add("33");
            
            l4.add("41");
            l4.add("42");
            l4.add("43");
            
               
            printList(l1,l2,l3,l4);
      }
    public static List<String> calculateTow(List<String> list1,List<String> list2){
    List<String> returnList = new ArrayList<String>();
    for(String s1:list1){
    for(String s2:list2){
    returnList.add(s1+s2);
    }
    }

    return returnList;
    }
    public static void printList(List<String>...ln){
    List<String> returnList = new ArrayList<String>();
    if(ln.length>2){
    returnList =calculateTow(ln[0],ln[1]);
    for(int i = 2;i<ln.length;i++){
     returnList = calculateTow(ln[2],returnList);
    }
    }else{
    returnList=ln[0];
    }
            for(String s:returnList){
        System.out.println(s);
        }



    }}