список комбинаций - PullRequest
       8

список комбинаций

0 голосов
/ 09 февраля 2020

Как вывести список комбинаций в java с методами, которые накладываются друг на друга.

1 Ответ

1 голос
/ 09 февраля 2020

Чтобы распечатать комбинации, вам нужно распечатать, когда amount == 0.

. Для этого вам нужно накопить то, что было сделано, чтобы получить это значение, то есть какие монеты были применены к amount значение.

Один из способов - построить строку, добавив пробел и значение монеты как часть рекурсивного вызова. Результирующая строка будет начинаться с пробела, поэтому ее необходимо пропустить при печати. ​​

public static int combo(int amount, int currentCoin, String combo) {
//                                          Added: ^^^^^^^^^^^^^^
    if (amount == 0) {
        System.out.println(combo.substring(1)); // <<<<< Added
        return 1;
    }
    if (amount < 0) {
        return 0;
    }

    int nCombos = 0;
    for (int coin = currentCoin; coin < coins.length; coin++) {
        nCombos += combo(amount - coins[coin], coin, combo + " " + coins[coin]);
        //                                  Added: ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    }

    return nCombos;
}

Тест

System.out.println("combo = " + combo(20, 0, ""));
//                                  Added: ^^^^

Вывод

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5
1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2
1 1 1 1 1 1 1 1 1 1 1 1 1 2 5
1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2
1 1 1 1 1 1 1 1 1 1 1 2 2 5
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2
1 1 1 1 1 1 1 1 1 1 5 5
1 1 1 1 1 1 1 1 1 2 2 2 5
1 1 1 1 1 1 1 1 2 2 2 2 2 2
1 1 1 1 1 1 1 1 2 5 5
1 1 1 1 1 1 1 2 2 2 2 5
1 1 1 1 1 1 2 2 2 2 2 2 2
1 1 1 1 1 1 2 2 5 5
1 1 1 1 1 2 2 2 2 2 5
1 1 1 1 1 5 5 5
1 1 1 1 2 2 2 2 2 2 2 2
1 1 1 1 2 2 2 5 5
1 1 1 2 2 2 2 2 2 5
1 1 1 2 5 5 5
1 1 2 2 2 2 2 2 2 2 2
1 1 2 2 2 2 5 5
1 2 2 2 2 2 2 2 5
1 2 2 5 5 5
2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 5 5
5 5 5 5
combo = 29
...