原问题:
有一个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
谁能有好的算法得到这个结果集合。字符串分组方法答案:
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;
}以上的方法可以解决字符串分组组合的问题,若将字符串换成对象,分组使用List,那就是返回的结果ret是包含多个List的嵌套List,而多个List中的一个就是一个分组,这样具体如何实现。
有一个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
谁能有好的算法得到这个结果集合。字符串分组方法答案:
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;
}以上的方法可以解决字符串分组组合的问题,若将字符串换成对象,分组使用List,那就是返回的结果ret是包含多个List的嵌套List,而多个List中的一个就是一个分组,这样具体如何实现。
解决方案 »
- java 的equals方法和compareTo方法比较
- 菜鸟提问
- div定位问题(当点击一个图片按纽,图片居中显示)
- 使用concurrent如何实现线程的同步互斥?(线程池中只有一个线程能执行某个任务)
- class文件问题
- 利用反射,将一个javaBean生成一张表,如何解决java类型与mssqlerver2000类型转换问题?
- POI有实现对EXCEL文件的某个单元格实现保护功能么?
- 请教如何安装用友eHR系统
- 谁知道如何根据图片的url把图片下载到指定目录?
- 为什么我这个枚举程序按照书上写的程序有那么多错误,我还改正不了?
- 高分求混淆器及用法说明
- 对象序列化传送的问题,知其然而不知其所以然(帮顶有分)
import java.util.ArrayList;
import java.util.List;public class CMN {
List list; Object[] o; public CMN(List list) {
this.list = list;
o = new Object[list.size()]; }
public void DFS(int index) {
if (index == list.size()) {
show(o);
return;
}
List temp = (List) list.get(index);
for (int i = 0; i < temp.size(); i++) {
o[index] = temp.get(i); DFS(index + 1); }
} private static void show(Object[] o) {
for (int i = 0; i < o.length; i++) {
System.out.print(o[i]);
}
System.out.println();
} public static void main(String[] args) {
List test = getTestData();
CMN t = new CMN(test);
t.DFS(0);
} /**
*
*/
private static List getTestData() {
List test = new ArrayList();
test.add(objects2List(new Object[] { new T("A1"), new T("A2") }));
test.add(objects2List(new Object[] { new T("B1"), new T("B2"),
new T("B3") }));
test.add(objects2List(new Object[] { new T("C1") }));
return test;
} private static List objects2List(Object[] o) {
List res = new ArrayList();
for (int i = 0; i < o.length; i++) {
res.add(o[i]);
}
return res;
}}class T {
private String name; public T(String name) {
this.name = name;
} public String toString() {
return name;
}
}