组合问题升级再问高手

zhaowin8888 2006-03-20 06:11:11
原问题:
有一个List对象,其中包含了n个List,这n个List中由包含不同数量的某种对象,每个List中的对象数量最少有一个,最多不限,如下的树型结构:
RootList--
|_A List
|_A1
|_A2
|_B List
|_B1
|_B2
|_B3
|_C List
|_C1

A 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中的一个就是一个分组,这样具体如何实现。
...全文
61 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
wizardblue 2006-03-20
  • 打赏
  • 举报
回复

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;
}
}

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧