从3个元素中取出6个元素,作为一个新数组, 允许元素重复,多个组合之间元素个数不允许重复,使用java
时间: 2024-05-12 17:15:39 浏览: 9
这是一个组合问题,可以使用递归的方式实现。具体实现如下:
```java
import java.util.ArrayList;
import java.util.List;
public class Combination {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
List<List<Integer>> result = combination(arr, 6);
System.out.println(result);
}
private static List<List<Integer>> combination(int[] arr, int n) {
List<List<Integer>> result = new ArrayList<>();
if (arr.length == 0 || n > arr.length) {
return result;
}
List<Integer> temp = new ArrayList<>();
combinationHelper(arr, n, 0, temp, result);
return result;
}
private static void combinationHelper(int[] arr, int n, int start, List<Integer> temp, List<List<Integer>> result) {
if (temp.size() == n) {
result.add(new ArrayList<>(temp));
return;
}
for (int i = start; i < arr.length; i++) {
temp.add(arr[i]);
combinationHelper(arr, n, i, temp, result);
temp.remove(temp.size() - 1);
}
}
}
```
其中,combination方法是入口方法,接受一个数组和需要选取的元素个数n作为参数,返回一个包含所有组合的列表。combinationHelper方法是递归方法,用于生成所有的组合,接受一个数组、需要选取的元素个数n、起始下标start、临时列表temp和结果列表result作为参数。在递归过程中,如果临时列表中的元素个数等于需要选取的元素个数n,就将临时列表中的元素加入结果列表中。否则,从起始下标start开始循环数组,将元素加入临时列表中,继续递归。最后,将临时列表中的最后一个元素移除,返回上一层递归。