100分求一个小算法

ustbsjl 2007-12-22 09:44:20
问题描述:
有n个ArrayList,n不确定,现在想在每个ArrayList里面取一个数据放在另外的ArrayList里面,但是其中第i个ArrayList只能取第一个数据,i也是不确定的。比如现在有3个ArrayList,内容分别为{a,b}{c,d}{e,f},现在如果i为1,则我要得到{a,c,e}{a,c,f}{b,c,e}{b,c,f},请高手指点一下这个小算法如何实现?问题解决立即结贴!
...全文
420 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
GhostAdai 2007-12-24
  • 打赏
  • 举报
回复
没看懂LZ的意思。
xierangh 2007-12-24
  • 打赏
  • 举报
回复
up!!!
jinzhuo3373247 2007-12-24
  • 打赏
  • 举报
回复
学习
ada100 2007-12-23
  • 打赏
  • 举报
回复
我觉得楼主意思是不是在所有的arraylist中遍历以后,找到不存在的字符,然后再和原来的arraylist元素组合成有序的子arraylist
ustbsjl 2007-12-23
  • 打赏
  • 举报
回复
23楼这个递归的想法不错,问题应该可以解决。这几天有事外出,结贴!
ltc_mouse 2007-12-22
  • 打赏
  • 举报
回复
不知道我的理解对不对。某个符合条件的解 resultSet满足两个条件:

1. resultSet[i]始终是第i个ArrayList的第一个元素,即resultSet[i]==arrLists[i].get(0);
2. j!=i时, resultSet[j] 在第j个数组arrLists[j]中
ustbsjl 2007-12-22
  • 打赏
  • 举报
回复
这个问题是比较难描述
axz200 2007-12-22
  • 打赏
  • 举报
回复
太历害了,我是新手,看不懂啊!!!!!!
ltc_mouse 2007-12-22
  • 打赏
  • 举报
回复
我觉得我在10楼的理解应该没什么问题吧,或者是我的表述也不够清晰?

给一段递归的算法代码吧,不知道能否满足楼主的要求:

import java.util.*;
public class Test {
/**
* 递归选择各个列表中的元素,放到新的列表中;都选择完后进行输出
* @param arrs N个列表组成的数组
* @param list 新列表,存放输出结果
* @param i 固定选择第一个元素的那个列表索引
* @param cur 本次递归要从哪个列表中选择元素
*/
public static void printNewArrays(ArrayList<Character>[] arrs,
ArrayList<Character> list, int i, int cur) {
if(cur==i) cur++;
if(cur<arrs.length) {
ArrayList<Character> curList=arrs[cur];
int size = curList.size();
for(int j=0; j<size; ++j) {
list.set(cur, curList.get(j));
printNewArrays(arrs, list, i, cur+1);
}
} else {
System.out.println(list);
}
}
/**
* 从列表数组中选择元素,放到新数组,并打印新列表
* @param arrs 列表数组
* @param i 哪个列表只选择固定元素
*/
public static void getNewArrays(ArrayList<Character>[] arrs, int i) {
ArrayList<Character> list=new ArrayList<Character>(arrs.length);
for(int k=0; k<arrs.length; ++k) list.add('*');
if(i>=0 && i<arrs.length) {
list.set(i, arrs[i].get(0));
printNewArrays(arrs, list, i, 0);
}
}

/** 初始化这段挺烦人的,这么写看着就难受... */
public static void arrsTest() {
final int ARRAY_COUNT = 3;
ArrayList<Character>[] arrs = new ArrayList[ARRAY_COUNT];
arrs[0]=new ArrayList<Character>(2);
arrs[1]=new ArrayList<Character>(2);
arrs[2]=new ArrayList<Character>(2);
arrs[0].addAll(Arrays.asList('a','b'));
arrs[1].addAll(Arrays.asList('c','d'));
arrs[2].addAll(Arrays.asList('e','f'));
getNewArrays(arrs, 1);
}

public static void main(String[] args) {
arrsTest();
}
}
healer_kx 2007-12-22
  • 打赏
  • 举报
回复
受不了了。表述。。。 。。。。
ustbsjl 2007-12-22
  • 打赏
  • 举报
回复
你看错了吧,没有出现d,f是没有关系的,因为它出现在另一个List中
healer_kx 2007-12-22
  • 打赏
  • 举报
回复
为什么i=1的时候。。。还有f和d出现啊?
ustbsjl 2007-12-22
  • 打赏
  • 举报
回复
比如在上面的例子中有三个ArrayList分别为{a,b}{c,d}{e,f},那么n就是等于3,如果i=1,即{c,d}这个List只能取c这个数,我每次要得到的结果都需要在每一个List中取数,而且每次一个List中只取一个,所以得到的结果应该是{a,c,e}{a,c,f}{b,c,e}{b,c,f}
healer_kx 2007-12-22
  • 打赏
  • 举报
回复
依然没有看懂。。。 。。。
ustbsjl 2007-12-22
  • 打赏
  • 举报
回复
不是组合,每个List只取一个,但是其中第i个只能取第一个,看我给的例子应该能明白
zjp8023 2007-12-22
  • 打赏
  • 举报
回复
每个ARRLIST只取一个吗?
healer_kx 2007-12-22
  • 打赏
  • 举报
回复
没有看懂,你是说组合嘛?
ustbsjl 2007-12-22
  • 打赏
  • 举报
回复
cindy,在上面给了例子中{a,b}{c,d}{e,f}得到{a,c,e}{a,c,f}{b,c,e}{b,c,f},我不是只要得到其中一个,而是四个都得到,所以不是随机问题,在前面{a,b}{c,d}{e,f}确定的情况下,我要的结果也是确定的
cindy20050919 2007-12-22
  • 打赏
  • 举报
回复
我建议首先产生一个随机数,这样可以得到从第几个arraylist中取数,再取一次随机数得要要取arraylist中的第几个数字
healer_kx 2007-12-22
  • 打赏
  • 举报
回复
晕。。。是我们哪里不明白你的表述,你看谁明白了?
服了。。。
加载更多回复(9)

62,623

社区成员

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

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