【发布时间】:2016-05-31 22:14:42
【问题描述】:
我有一个算法,它通过从每一列中取一个项目来返回所有可能的组合(这里选择汤、面条和浇头)。
有没有更有效和动态的方法来做到这一点?为了使 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 他不是,他正在选择第一个、第二个和第三个数组
-
哈哈哈哈哈。谢谢你。不知道我发生了什么事。 :) 没有乌冬面作为选项的想法让我感到害怕,超出了逻辑和理性的范畴。 :O :D
标签: java arrays algorithm combinations