LeetCode 518 — Coin Change II

Cuarto problema de DP 2-D. Variante de 322-coin-change: en lugar de mínimo número de monedas, cuántas combinaciones distintas hay para sumar amount.

Enunciado

coins y amount. Devuelve número de combinaciones que suman amount (cada moneda reusable, orden no importa).


Solución — DP O(amount) espacio

class Solution:
    def change(self, amount, coins):
        dp = [0] * (amount + 1)
        dp[0] = 1                                # una forma de hacer 0: vacío
        for c in coins:                          # ⭐ moneda en bucle EXTERNO
            for a in range(c, amount + 1):
                dp[a] += dp[a - c]
        return dp[amount]

Análisis: O(amount · n_coins).

Por qué moneda en bucle externo

Si pones for c in coins dentro, contarías [1,2] y [2,1] como combinaciones distintas. Con la moneda fuera, fijas un orden y solo cuentas combinaciones únicas.


Conexiones

Estado

  • Leído
  • Implementado desde cero
  • Resuelto en LeetCode