如何在Java中获取整数数组列表的组合集合?

如何在Java中获取整数数组列表的组合集合?,java,arraylist,combinations,Java,Arraylist,Combinations,我的目标是在具有固定预定义长度的ArrayList中找到所有可能的项组合。例如,如果我的ArrayList名为arr并包含,则预定义大小r=2的所需输出将为: <1,2> <1,3> <2,3> 下面是我找到的打印所需输出的代码。我的问题是我需要定义一个返回值类型ArrayList,它保存方法的输出。此外,我的输入类型也是一个ArrayList,而不是一个数组,这使它对我来说更加复杂,因为我首先需要将值转换为基本类型int import java.io

我的目标是在具有固定预定义长度的ArrayList中找到所有可能的项组合。例如,如果我的ArrayList名为arr并包含
,则预定义大小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;j
ArrayList
由数组内部备份,因此将当前基于
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);
}