java - 如何获取所有列表的列表,其中恰好包含列表列表的每个列表的一个元素

标签 java algorithm

正如您可能已经从标题中理解的那样,我需要一些聪明的思考:)

我有一个 List<List<Object>>目的。如果您将 Object 对象视为整数,您可以这样看:

{{1,2},{10,20,30},{100}}

我需要得到所有可能的列表,其中只包含每个列表的一个元素,也就是说,想出这个:

{{1,10,100},{1,20,100},{1,30,100},{2,10,100},{2,20,100},{2,30,100}}

当然,在编译时您并不知道列表将包含多少项,因此您不能依赖 for 的重叠。循环...

你是怎么想到这个的?时间限制与我的问题无关,因为列表可能包含的元素很少。

最佳答案

迭代算法。

public class A {
    public static List<List<Integer>> combinations(List<List<Integer>> inputList) {
        List<List<Integer>> result = new LinkedList<List<Integer>>();
        for (Integer i : inputList.get(0)) {
            List<Integer> temp = new ArrayList<Integer>(1);
            temp.add(i);
            result.add(temp);
        }
        for (int i = 1; i < inputList.size(); i++) {
            result = make(result, inputList.get(i));
        }
        return result;
    }

    private static List<List<Integer>> make(List<List<Integer>> in, List<Integer> n) {
        List<List<Integer>> res = new LinkedList<List<Integer>>();
        for (List<Integer> l : in) {
            for (Integer i : n) {
                List<Integer> cur = new ArrayList<Integer>(l.size() + 1);
                cur.addAll(l);
                cur.add(i);
                res.add(cur);
            }
        }
        return res;
    }
    public static void main(String[] args) {
        List<List<Integer>> inputList = new ArrayList();
        inputList.add(new ArrayList<Integer>() {{
            add(1);
            add(2);
        }});
        inputList.add(new ArrayList<Integer>() {{
            add(10);
            add(20);
            add(30);
        }});
        inputList.add(new ArrayList<Integer>() {{
            add(100);
        }});
        System.out.println(combinations(inputList));
    }
}

*请注意,此代码不适用于生产!您应该将 LinkedList 替换为具有初始大小的 ArrayList,进行检查等。

upd 提供了使用示例。有一些代码改进。但它仍然只是草稿。我不建议您在实际任务中使用它。

关于java - 如何获取所有列表的列表,其中恰好包含列表列表的每个列表的一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5220701/

相关文章:

c++ - std::find_end 作为 Big-O 的复杂性

c# - Floyd-Warshall算法如何输出最短路径?

java - 阻止 Gson 内省(introspection)类注释

algorithm - 从视频中删除分段(例如人或鸟)的标准技术是什么?

java - 如何让我的程序根据用户输入打开一个窗口?

java - 针对 openjpa 上的原始类型调用带有后缀 "IN"的 spring data jpa 查询方法时出现异常

c++ - 深度优先搜索

algorithm - 数数字符串

java - 重复条目 : com/google/android/gms/analytics/internal/Command. 类

java - 动画无法正常工作?