String [] a = new String[]{"a1","a2","a3","a4","a5"};
String [] b = new String[]{"b1","b2","b3","b4","b5","b6"};
String [] c = new String[]{"c1","c2","c3","c4"};
String [] d = new String[]{"d1","d2","d3","d4"};
List list = new ArrayList();
list.add(a);
list.add(b);
list.add(c);
list.add(d);
现在无法确定list里面有几条数据,可能是1条,也可能是10条
计算出有多少种组合
类似
a1 a1b1 a1b2 a1b3 a1b4 a1b5 a1b6 a1b1c1 a1b2c1 a1b3c1... a1b1c1d1....
a2 a2b1 a2b2 a2b3 a2b4 a2b5 a2b6
a3........
...
b1 b1c1 b1c2 b1c3 b1c4 ... b1c1d1...
b2 b2c1 b2c2.......
... 算法
String [] b = new String[]{"b1","b2","b3","b4","b5","b6"};
String [] c = new String[]{"c1","c2","c3","c4"};
String [] d = new String[]{"d1","d2","d3","d4"};
List list = new ArrayList();
list.add(a);
list.add(b);
list.add(c);
list.add(d);
现在无法确定list里面有几条数据,可能是1条,也可能是10条
计算出有多少种组合
类似
a1 a1b1 a1b2 a1b3 a1b4 a1b5 a1b6 a1b1c1 a1b2c1 a1b3c1... a1b1c1d1....
a2 a2b1 a2b2 a2b3 a2b4 a2b5 a2b6
a3........
...
b1 b1c1 b1c2 b1c3 b1c4 ... b1c1d1...
b2 b2c1 b2c2.......
... 算法
ArrayList<ArrayList> a=new ArrayList<ArrayList>();
ArrayList<String> b=new ArrayList<String>();
b.add("a");
b.add("b");
b.add("c");
b.add("d");
a.add(b);
ArrayList<String> b1=new ArrayList<String>();
b1.add("a1");
b1.add("b1");
b1.add("c1");
a.add(b1);
ArrayList<String> b2=new ArrayList<String>();
b2.add("a2");
b2.add("b2");
b2.add("c2");
b2.add("d2");
a.add(b2);
ArrayList<String> bb=new ArrayList<String>();
bb=select(a,bb,0);
for(int j=0;j<bb.size();j++){
System.out.println(bb.get(j));
} }
public static ArrayList<String> select(ArrayList<ArrayList> a2,ArrayList<String> bb,int k){
ArrayList<String> a=new ArrayList<String>();
ArrayList<String> b=new ArrayList<String>();
int h=k;
int s=a2.size();
if(h==s){
return bb;
}
a=a2.get(k);
b=bb;
int hh=b.size();
if(k!=0){
for(int j=0;j<hh;j++){
String o=b.get(j);
for(int i=0;i<a.size();i++){
if(i==0){
bb.set(j, o+a.get(i));
}else{
bb.add(o+a.get(i));
}
}
}
}else{
bb=a2.get(0);
}
return select(a2,bb,h+1);
}试试吧
String [] a = new String[]{"a1","a2","a3","a4","a5"};
String [] b = new String[]{"b1","b2","b3","b4","b5","b6"};
String [] c = new String[]{"c1","c2","c3","c4"};
String [] d = new String[]{"d1","d2","d3","d4"};
组合里面a,b,c,d每个数组里面只能取一个值
不能存在a1a2 b1b2得出来的值应该是这样的
a1 a1b1 a1b2 a1b3 a1b4 a1b5 a1b6 a1b1c1 a1b2c1 a1b3c1... a1b1c1d1....
a2 a2b1 a2b2 a2b3 a2b4 a2b5 a2b6
a3........
...
b1 b1c1 b1c2 b1c3 b1c4 ... b1c1d1...
b2 b2c1 b2c2.......
...
List<Integer> sizeList = new ArrayList<Integer>();
sizeList.add(5);
sizeList.add(6);
sizeList.add(4);
System.out.println(getTotalNumber(sizeList));
} public static int getTotalNumber(List<Integer> sizelist) {
int length = sizelist.size();
int lastSize = sizelist.get(length - 1); if (length == 1)
return lastSize; sizelist.remove(length - 1);
return getNewSize(sizelist) * lastSize + lastSize + getTotalNumber(sizelist);
} public static int getNewSize(List<Integer> sizelist) {
int newSize = 0;
int count = 1;
int length = sizelist.size();
for (int i = length - 1; i >= 0; i--) {
count *= sizelist.get(i);
newSize += count;
}
return newSize;
}
计算全部组合的个数,递归嘛
可能有10个,也可能是50个
我用的是
ArrayList<String> b=new ArrayList<String>();
b.add("a");
b.add("b");
b.add("c");
b.add("d");
a.add(b);
ArrayList<String> b1=new ArrayList<String>();
b1.add("a1");
b1.add("b1");
b1.add("c1");
你就不会把里面的值换一下
ArrayList<String> b=new ArrayList<String>();
b.add("a1");
b.add("a2");
b.add("a3");
b.add("a4");
a.add(b);
ArrayList<String> b1=new ArrayList<String>();
b1.add("b1");
b1.add("b2");
b1.add("b3");
b1.add("b4");
a.add(b1);
ArrayList<String> b2=new ArrayList<String>();
b2.add("c1");
b2.add("c2");
b2.add("c3");
b2.add("c4");
a.add(b2);
ArrayList<String> b3=new ArrayList<String>();
b3.add("d1");
b3.add("d2");
b3.add("d3");
b3.add("d4");
a.add(b3);