一下代码是
第一个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是不确定的,是动态的 怎么算排列情况??
第一个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是不确定的,是动态的 怎么算排列情况??
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);
}
}
意思是这个List是不确定的,是动态的 怎么算排列情况??
======
应该是这堆list是不确定的吧那你怎么传参数呢。。如果有这需要,,用递归如何。。想想。。在想。
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);
}
}}