如何在Java中获取整数数组列表的组合集合?
我的目标是在具有固定预定义长度的ArrayList中找到所有可能的项组合。例如,如果我的ArrayList名为arr并包含如何在Java中获取整数数组列表的组合集合?,java,arraylist,combinations,Java,Arraylist,Combinations,我的目标是在具有固定预定义长度的ArrayList中找到所有可能的项组合。例如,如果我的ArrayList名为arr并包含,则预定义大小r=2的所需输出将为: <1,2> <1,3> <2,3> 下面是我找到的打印所需输出的代码。我的问题是我需要定义一个返回值类型ArrayList,它保存方法的输出。此外,我的输入类型也是一个ArrayList,而不是一个数组,这使它对我来说更加复杂,因为我首先需要将值转换为基本类型int import java.io
,则预定义大小r=2的所需输出将为:
<1,2>
<1,3>
<2,3>
下面是我找到的打印所需输出的代码。我的问题是我需要定义一个返回值类型ArrayList,它保存方法的输出。此外,我的输入类型也是一个ArrayList
,而不是一个数组,这使它对我来说更加复杂,因为我首先需要将值转换为基本类型int
import java.io.*;
class Permutation {
/* arr[] ---> Input Array
data[] ---> Temporary array to store current combination
start & end ---> Staring and Ending indexes in arr[]
index ---> Current index in data[]
r ---> Size of a combination to be printed */
static void combinationUtil(int arr[], int data[], int start,
int end, int index, int r)
{
// Current combination is ready to be printed, print it
if (index == r)
{
for (int j=0; j<r; j++)
System.out.print(data[j]+" ");
System.out.println("");
return;
}
// replace index with all possible elements. The condition
// "end-i+1 >= r-index" makes sure that including one element
// at index will make a combination with remaining elements
// at remaining positions
for (int i=start; i<=end && end-i+1 >= r-index; i++)
{
data[index] = arr[i];
combinationUtil(arr, data, i+1, end, index+1, r);
}
}
// The main function that prints all combinations of size r
// in arr[] of size n. This function mainly uses combinationUtil()
static void printCombination(int arr[], int n, int r)
{
// A temporary array to store all combination one by one
int data[]=new int[r];
// Print all combination using temprary array 'data[]'
combinationUtil(arr, data, 0, n-1, 0, r);
}
/*Driver function to check for above function*/
public static void main (String[] args) {
int arr[] = {1, 2, 3, 4, 5};
int r = 3;
int n = arr.length;
printCombination(arr, n, r);
}
}
/* This code is contributed by Devesh Agrawal */
import java.io.*;
类置换{
/*arr[]-->输入阵列
data[]-->用于存储当前组合的临时数组
开始和结束--->开始和结束arr[]中的索引
索引--->数据中的当前索引[]
r--->要打印的组合的大小*/
静态void组合util(int arr[],int data[],int start,
int end,int index,int r)
{
//当前组合已准备好打印,请打印它
如果(索引==r)
{
for(int j=0;jArrayList
由数组内部备份,因此将当前基于ArrayList
的实现转换为ArrayList
应该是合理的。在arrays
中使用[]
运算符对数组中的元素进行索引,使用数组列表
的并行操作是和。您可能还想继续阅读。使用的可能实现列出了
:
static void combinationUtil(List<Integer> list, List<Integer> data, int start, int end, int index, int r) {
// Current combination is ready to be printed, print it
if (index == r) {
for (int j = 0; j < r; j++)
System.out.print(data.get(j) + " ");
System.out.println("");
return;
}
// replace index with all possible elements. The condition
// "end-i+1 >= r-index" makes sure that including one element
// at index will make a combination with remaining elements
// at remaining positions
for (int i = start; i <= end && end - i + 1 >= r - index; i++) {
data.set(index, list.get(i));
combinationUtil(list, data, i + 1, end, index + 1, r);
}
}
// The main function that prints all combinations of size r
// in list of size n. This function mainly uses combinationUtil()
static void printCombination(List<Integer> list, int n, int r) {
// A temporary array to store all combination one by one
List<Integer> data = new ArrayList<>(Collections.nCopies(r, 0));
// Print all combination using temporary array 'data'
combinationUtil(list, data, 0, n - 1, 0, r);
}
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int r = 3;
int n = list.size();
printCombination(list, n, r);
}
静态void组合util(列表列表、列表数据、int开始、int结束、int索引、int r){
//当前组合已准备好打印,请打印它
如果(索引==r){
对于(int j=0;j=r-index”确保包含一个元素
//at索引将与其余元素进行组合
//在剩余位置
for(inti=start;i=r-index;i++){
data.set(index,list.get(i));
组合util(列表、数据、i+1、结束、索引+1、r);
}
}
//打印大小r的所有组合的主要功能
//在大小n的列表中。此函数主要使用combinationUtil()
静态无效打印组合(列表、int n、int r){
//用于逐个存储所有组合的临时数组
列表数据=新的ArrayList(Collections.nCopies(r,0));
//使用临时数组“数据”打印所有组合
组合util(列表,数据,0,n-1,0,r);
}
公共静态void main(字符串[]args){
List=Arrays.asList(1,2,3,4,5);
int r=3;
int n=list.size();
打印组合(列表,n,r);
}