工作中遇到一个集合拆分的算法问题。要把几个数组或者集合,组合起来。每个集合或数组只取一个。想了老半天没有想到,问几个人都说很简单吗,他们都举了一个例子,然后进行遍历。当我说我想要个通用方法的时候,都卡住了,需要花一点时间去想了。
难点在于:1.因为我门不知道别人给我传多少个集合,每个集合长度多少。 2.他们的交集在哪里
下面就是我写的代码:
import java.util.ArrayList; import java.util.List; /** * Created by admini on 2017/5/5. */ public class Test { List<List<String>> listTo = new ArrayList<List<String>>(); public List<List<String>> getList1( List<List<String>> lists){ for (int i = 0 ; i < lists.get(0).size() ; i++){ ArrayList<String> st1 = new ArrayList<String>(); st1.add(lists.get(0).get(i)); if(lists.size() == 2){ for (int j = 0 ; j < lists.get(1).size() ; j++){ ArrayList<String> st2 = new ArrayList<String>(); st2 = (ArrayList)st1.clone(); String s = lists.get(lists.size() - 1).get(j); st2.add(s); listTo.add(st2); } }else { listTo = this.tm1(lists, 1, st1); } } return listTo; } public List<List<String>> tm1(List<List<String>> lists , int j,ArrayList<String> st){ for (int i = 0 ; i < lists.get(j).size() ; i++){ ArrayList<String> st1 = new ArrayList<String>(); st1 = (ArrayList)st.clone(); st1.add(lists.get(j).get(i)); if(j == lists.size() -2){ for (int t = 0 ; t < lists.get(lists.size() -1).size() ; t++){ ArrayList<String> st2 = new ArrayList<String>(); st2 = (ArrayList)st1.clone(); String s = lists.get(lists.size() - 1).get(t); st2.add(s); listTo.add(st2); } }else { this.tm1(lists,j+1,st1); } } return listTo; } public static void main(String[] args){ List<String> strings1 = new ArrayList<String>(); List<String> strings2 = new ArrayList<String>(); List<String> strings3 = new ArrayList<String>(); strings1.add("1"); strings1.add("3"); strings2.add("1"); strings2.add("2"); strings3.add("1"); strings3.add("2"); strings3.add("3"); List<List<String>> lists = new ArrayList<List<String>>(); lists.add(strings1); lists.add(strings2); lists.add(strings3); Test test = new Test(); List<List<String>> list1 = test.getList1(lists); int j = 0; for (List<String> l : list1){ System.out.println(l.get(0) + "-" + l.get(1) + "-" + l.get(2) + "********" + j); j++; } } }
结果就自己运行一下,看看了。如果是数组的道理也是一样。