如何在Java中创建动态嵌套循环?

时间:2019-06-14 06:49:47

标签: java nested-loops

我正在尝试使用for loop以动态方式添加所有组合的数组列表值。例如,在数组中添加两个元素的组合可以通过嵌套循环来完成。类似地,像3,4,5,6,7,8这样的组合加法需要动态生成循环。我该怎么办?

static int birthday(List<Integer> s, int d, int m) {

    int l=s.size();
    int count=0;
    int a[]=new int[l];
    for (int x=0; x<l; x++){
        a[x]=s.get(x);
    }
    if(m==2){
        for (int i=0; i<l; i++){
            for (int j=i+1; i<l; i++){
                if(a[i]+a[j]==d){
                    count++;
                }
            }
        }
    }
    else if(m==1){
        count++;
    }
    return count;
}

以上代码适用于1和2组合以及所有3,4,... 10。我想生成动态for loop。请提供解决方案。

1 个答案:

答案 0 :(得分:2)

您可以使用递归:

static int birthday(List<Integer> s, int d, int m) {
    int l=s.size();
    int a[]=new int[l];
    for (int x=0; x<l; x++){
        a[x]=s.get(x);
    }
    return birthday(a, d, m, 0, 0);
}

private static int birthday(int[] a, int d, int m, int start, int sum) {
    if (m == 0) {
        return sum == d ? 1 : 0;
    }
    int count=0;
    for (int i = start; i <= a.length-m; ++i) {
        count += birthday(a, d, m-1, i+1, sum+a[i]);
    }
    return count;
}

如果对数组进行排序并且可以假定列表中的所有元素都是正数,则可以进行某些优化。