Как я могу создать динамические вложенные циклы в Java? - PullRequest
0 голосов
/ 14 июня 2019

Я пытаюсь динамически добавлять значения списка массивов всех комбинаций, используя 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 Ответ

2 голосов
/ 14 июня 2019

Вы можете использовать рекурсию:

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;
}

Возможна некоторая оптимизация, если вы сортируете массив и можете считать, что все элементы списка положительны.

...