Cepillo título 37-- cambio convertible (botón de encendido)

69.  intercambio de cambio

tema Enlace

Fuente: Botón de estancia (LeetCode)
enlace: https: //leetcode-cn.com/problems/coin-change

título Descripción

Teniendo en cuenta las diferentes denominaciones de monedas de monedas y una cantidad total de cantidad. Podemos escribir una función para calcular el número mínimo de monedas necesarias para compensar la cantidad total. Si no hay ninguna combinación puede estar compuesta de cualquiera de una cantidad total de monedas, devuelva -1.

Ejemplo 1:

De entrada: monedas = [1, 2, 5], cantidad = 11
de salida: 3
Explicación: 11 = 5 + 5 + 1

Ejemplo 2:

Entrada: Monedas = [2], cantidad = 3
Salida: -1
Nota:
Se puede pensar en cada número de monedas es ilimitado.

Key Technology

Programación dinámica

tema de análisis

Análisis según el Ejemplo 1:

  1. De denominación de moneda son: 1,2,5, la cantidad total es de 11, ahora se supone que DP [i] es la suma del número de monedas cuando la solución óptima de i;
  2. Debido a que hay tres denominaciones diferentes, por lo que hay 11 requieren tres métodos son: 1 + dp [10]; 1 + dp [8]; 1 + dp [6];
  3. Por lo tanto la conversión de la solución óptima 11 es tres o más, respectivamente, una solución óptima, que es un número mínimo de monedas, es decir, dp [11] = Math.min (1 + dp [10], 1+ dp [8], 1 + dp [6])
  4. Derivado ecuación de transición de estado: dp [i] = Math.min (dp [i-moneda] 1, dp [i-moneda] 1, dp [i-moneda] 1, ......)
  5. ¿Cuántas monedas de comparar el número de veces, la moneda depende de cómo muchas monedas de diferentes denominaciones son varias.
  6. Para dp [10], dp [8], dp [6] y, a continuación de acuerdo con la etapa de descomposición arriba.
/ ** 
 * @param {número []} monedas 
 * @param {número} cantidad 
 * @return {número} 
 * / 
var coinChange = función (monedas, cantidad) { 
    var dp = new Array (cantidad + 1) .Rellenar ( Infinito); 
    dp [0] = 0; 
    para (dejo i = 0; i <= cantidad; i ++) { 
        for (deje de monedas de monedas) { 
            si (i - moneda> = 0) { 
                dp [i] = Math.min (dp [i], dp [i -Moneda] 1); 
            } 
        } 
    } 
    Retorno dp [cantidad] === Infinity? -1: dp [cantidad]; 
    
};

  

Supongo que te gusta

Origin www.cnblogs.com/liu-xin1995/p/12444790.html
Recomendado
Clasificación