问题描述:
有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},请高手指点一下这个小算法如何实现?问题解决立即结贴!

解决方案 »

  1.   

    不是组合,每个List只取一个,但是其中第i个只能取第一个,看我给的例子应该能明白
      

  2.   

    比如在上面的例子中有三个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}
      

  3.   

    为什么i=1的时候还有f和d出现啊?
      

  4.   

    你看错了吧,没有出现d,f是没有关系的,因为它出现在另一个List中
      

  5.   

    不知道我的理解对不对。某个符合条件的解 resultSet满足两个条件:1. resultSet[i]始终是第i个ArrayList的第一个元素,即resultSet[i]==arrLists[i].get(0);
    2. j!=i时, resultSet[j] 在第j个数组arrLists[j]中
      

  6.   

    如果i=1的时候怎么还能有b呢?不是只输出i=1的第一个数据吗?那应该是输出{a,c,e}{a,c,f}{a,d,e}{a,d,f}啊?
      

  7.   

    10的理解好像也是有问题的,我每次返回的结果都是从n个List中各取1个,但是其中第i个每次都是取第一个,你也可以认为第i个List只有一个元素,上面的{a,b}{c,d}{e,f},其实和{a,b}{c}{e,f}是一样的
      

  8.   

    1、写个获取随机数的方法
    2、通过这个方法每次到一个list里面取值
    3、把这个取出来的值放到新的list里面,然后到下一个list里面取值,然后放到需要的list里面,
    4、重复第2、3两步,直到所有的n个List全部遍历完成
    是这样的么??
      

  9.   

    1、写个获取随机数的方法
    2、通过这个方法每次到一个list里面取值
    3、把这个取出来的值放到新的list里面,然后到下一个list里面取值,然后放到需要的list里面,
    4、重复第2、3两步,直到所有的n个List全部遍历完成
    是这样的么??
      

  10.   

    我建议首先产生一个随机数,这样可以得到从第几个arraylist中取数,再取一次随机数得要要取arraylist中的第几个数字
      

  11.   

    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}确定的情况下,我要的结果也是确定的
      

  12.   

    我觉得我在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();
    }
    }
      

  13.   

    我觉得楼主意思是不是在所有的arraylist中遍历以后,找到不存在的字符,然后再和原来的arraylist元素组合成有序的子arraylist