gpt4 book ai didi

Java 组合生成

转载 作者:行者123 更新时间:2023-11-30 07:24:51 26 4
gpt4 key购买 nike

我想看看 java 是否有一些我可以利用的组合特性。我想要一个动态列表,并以一种干净的方式让 java 生成所有组合。

给定一个对象列表,例如下面的字符串。有没有一种简单的方法/干净的方法/最好已经内置到核心java中的东西来生成项目的所有组合?例如如果我有:

List<String> items = new ArrayList<String>();
items.add("a");
items.add("b");
List<List<String>> result = generateCombinationOf(items);

我希望结果包含:{{}, {"a"}, {"b"}, {"a", "b"}}

旁注:我过去能够在mathematica中生成这样的列表。我有一个业余项目,我想利用 java,并且希望尽可能避免与 mathematica 集成,但如果我找不到像上面这样容易使用的功能,我会这样做。

最佳答案

试试这个。

static void generateCombinationOf(List<String> items,
List<String> selected, int index, List<List<String>> result) {
if (index >= items.size()) {
result.add(new ArrayList<>(selected));
} else {
generateCombinationOf(items, selected, index + 1, result);
selected.add(items.get(index));
generateCombinationOf(items, selected, index + 1, result);
selected.remove(selected.size() - 1);
}
}

static List<List<String>> generateCombinationOf(List<String> items) {
List<List<String>> result = new ArrayList<>();
List<String> selected = new ArrayList<>();
generateCombinationOf(items, selected, 0, result);
return result;
}

System.out.println(generateCombinationOf(Arrays.asList("a", "b")));

结果

[[], [b], [a], [a, b]]

非递归版本

static List<List<String>> generateCombinationOf(List<String> list) {
List<List<String>> result = new ArrayList<>();
for (int i = 0, max = 1 << list.size(); i < max; ++i) {
List<String> comb = new ArrayList<>();
for (int j = 0, k = i; k > 0; ++j, k >>= 1)
if ((k & 1) == 1)
comb.add(list.get(j));
result.add(comb);
}
return result;
}

关于Java 组合生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36959324/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com