- 主题:这种组合算法怎么写?
import java.util.ArrayList;
import java.util.List;
public class CombinationGenerator {
public static void main(String[] args) {
String[] elements = {"a", "b", "c", "d"};
List<List<String>> combinations = new ArrayList<>();
generateCombinations(elements, combinations, 0, new ArrayList<>());
for (List<String> combination : combinations) {
System.out.println(combination);
}
}
private static void generateCombinations(String[] elements, List<List<String>> result, int start, List<String> current) {
if (current.size() == elements.length) {
result.add(new ArrayList<>(current));
return;
}
for (int i = start; i < elements.length; i++) {
current.add(elements[i]);
generateCombinations(elements, result, i + 1, current);
current.remove(current.size() - 1);
}
}
}
【 在 iStudy 的大作中提到: 】
: a,b,c,d四个对象
: 我要生成a,b,c,d的全组合===C(4,1)+C(4,2)+C(4,3)+C(4,4)
: 结果就是输出 {a,b,c,d, ab,ac,ad,bc,bd,cd,abc,abd,acd,bcd,abcd}
: ...................
--
FROM 183.14.132.*
这不是chatgpt的强项么?
【 在 iStudy 的大作中提到: 】
: 标 题: 这种组合算法怎么写?
: 发信站: 水木社区 (Tue May 28 19:10:33 2024), 站内
:
: a,b,c,d四个对象
:
: 我要生成a,b,c,d的全组合===C(4,1)+C(4,2)+C(4,3)+C(4,4)
:
: 结果就是输出 {a,b,c,d, ab,ac,ad,bc,bd,cd,abc,abd,acd,bcd,abcd}
:
: 这种算法很常见,java有类似的库吗?
:
: --
:
: ※ 修改:·iStudy 于 May 28 19:15:08 2024 修改本文·[FROM: 58.37.127.*]
: ※ 来源:·水木社区 mysmth.net·[FROM: 58.37.127.*]
--
修改:iStudy FROM 58.37.127.*
FROM 117.84.98.*
baidu 的ai 都毫无压力
【 在 bom 的大作中提到: 】
: 这不是chatgpt的强项么?
--
FROM 220.196.193.*
kimi这么说的:
在Java中,要生成对象的全组合,你可以使用`Stream` API配合`Collectors`来实现。Java标准库本身并没有直接提供组合库,但是你可以使用已有的库如Apache Commons Math或者Google Guava等来帮助生成组合。
以下是使用Java 8及以上版本Stream API实现的示例:
```java
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class CombinationGenerator {
public static void main(String[] args) {
Object[] elements = {"a", "b", "c", "d"};
// 生成全组合
List<List<Object>> combinations = new ArrayList<>();
for (int i = 1; i <= elements.length; i++) {
combinations.addAll(combinations(elements, i));
}
// 打印结果
combinations.forEach(combination ->
System.out.println(combination.stream()
.map(Object::toString)
.collect(Collectors.joining(","))
)
);
}
private static List<List<Object>> combinations(Object[] elements, int k) {
return IntStream.rangeClosed(1, elements.length)
.mapToObj(i -> IntStream.range(0, k)
.mapToObj(j -> elements[i - 1 + j])
.collect(Collectors.toList())
)
.collect(Collectors.toList());
}
}
```
在这个示例中:
1. 我们定义了一个名为`CombinationGenerator`的类,其中包含`main`方法和`combinations`方法。
2. `main`方法中,我们定义了一个数组`elements`,包含四个对象`a`、`b`、`c`、`d`。
3. 我们使用了一个外部循环来遍历所有可能的组合长度,从1到数组的长度。
4. 对于每个长度`k`,我们调用`combinations`方法来生成所有长度为`k`的组合。
5. `combinations`方法使用`IntStream.rangeClosed`生成从1到`elements.length`的整数序列,然后映射每个整数`i`到一个长度为`k`的组合列表。
6. 内部的`mapToObj`操作生成每个组合中的元素列表,通过加上索引偏移`i - 1`来选择正确的元素。
7. 最后,我们收集并返回所有组合的列表。
这种方法不需要任何外部库,完全利用Java标准库中的Stream API来生成全组合。运行上述程序,你将得到所有可能的组合,并以指定格式输出。
--
FROM 220.194.43.*
AI下,应该不难
【 在 iStudy 的大作中提到: 】
: a,b,c,d四个对象
: 我要生成a,b,c,d的全组合===C(4,1)+C(4,2)+C(4,3)+C(4,4)
: 结果就是输出 {a,b,c,d, ab,ac,ad,bc,bd,cd,abc,abd,acd,bcd,abcd}
: ...................
--
FROM 114.246.236.*
我的跟这个思路差不多
【 在 scy 的大作中提到: 】
: import java.util.ArrayList;
: import java.util.List;
: public class CombinationGenerator {
: ...................
--
FROM 58.37.127.*
赞,这个看上去不错。晚上研究一下
【 在 grayCat 的大作中提到: 】
: kimi这么说的:
: 在Java中,要生成对象的全组合,你可以使用`Stream` API配合`Collectors`来实现。Java标准库本身并没有直接提供组合库,但是你可以使用已有的库如Apache Commons Math或者Google Guava等来帮助生成组合。
: 以下是使用Java 8及以上版本Stream API实现的示例:
: ...................
--
FROM 58.37.127.*
你以为我抄袭的。。编译都没通过。。还要抄袭吗,,哈哈哈
【 在 presento 的大作中提到: 】
: 试试AI?楼上的是自己写的吗
: ?
--
FROM 58.37.127.*
说真的,他这个代码,不喜欢。 可读性非常差。最关键的level变量不知道啥意思
这种一般是数学系的人,做过一些变换后,写出来的。。。。
可读性差,可维护差,几年后,默写不出来的!
【 在 caravan 的大作中提到: 】
: 你还是看懂二楼比较好,
--
FROM 58.37.127.*
用二进制的方法,
public static ArrayList<ArrayList<Integer>> generateCombinations(Array
List <Integer> array) {
ArrayList<ArrayList<Integer>> combinations = new
ArrayList<>();
int n = array.size();
int max = (1 << n); // 2^n
for (int i = 1; i < max; i++) {
ArrayList<Integer> combination = new ArrayList<>();
for (int j = 0; j < n; j++) {
if ((i & (1 << j)) != 0) {
combination.add(array.get(j));
}
}
combinations.add(combination);
}
return combinations;
}
【 在 iStudy 的大作中提到: 】
: a,b,c,d四个对象
: 我要生成a,b,c,d的全组合===C(4,1)+C(4,2)+C(4,3)+C(4,4)
: 结果就是输出 {a,b,c,d, ab,ac,ad,bc,bd,cd,abc,abd,acd,bcd,abcd}
: ...................
--
FROM 119.139.196.*