我有一个算法,通过从每列中取出一个项目(这里是汤,面条和浇头的选择)来返回所有可能的组合。Java查找列中所有可能的组合
有没有一个更有效率和动态的方式来做到这一点?为了使findAllCombinations方法起作用,我需要知道有多少列并对它们进行硬编码。
有效组合: [西洋菜汤,乌冬面,鱼立方],[辣汤,拉面,火腿] ...
ArrayList<ArrayList<String>> listOfLists = Lists.newArrayList();
listOfLists.add(Lists.newArrayList("Original Soup", "Spicy Soup", "Watercress Soup", "Thai Spicy Soup", "Malaysia Spicy Soup"));
listOfLists.add(Lists.newArrayList("Udon", "Ramen", "Egg Noodle", "Flat Rice Noodle", "Vermicelli", "Instant Noodle"));
listOfLists.add(Lists.newArrayList("Fish Cube", "Fish Ball", "Ham", "Squid", "Seaweed"));
ArrayList<ArrayList<String>> combo = findAllCombinations(listOfLists);
private ArrayList<ArrayList<String>> findAllCombinations(ArrayList<ArrayList<String>> arrays){
ArrayList<ArrayList<String>> combinations = new ArrayList<>();
for(String item1: arrays.get(0)){
for(String item2: arrays.get(1)){
for(String item3: arrays.get(2)){
ArrayList<String> temp = new ArrayList<String>() {
{
add(item1);
add(item2);
add(item3);
}
};
combinations.add(temp);
}
}
}
return combinations;
}
为什么跳过第二个数组的第一个成员和第三个数组的前两个成员? – LostAndConfused
@LostAndConfused你好像有点迷茫和困惑。 – shmosel
@LostAndConfused他不是,他正在选择第一,第二和第三阵列 – TheBakker