Un cambio de título de cambio del día Golang 322. Programación Dinámica

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:

De entrada: monedas = [2], la cantidad = 3
de salida: -1

NOTA:
Se puede pensar en la cantidad de cada moneda es ilimitado.

pensamiento

Programación Dinámica.

mi respuesta

func coinChange(coins []int, amount int) int {
    if amount==0{//0元不需要硬币
        return 0
    }
	cnt:=make([]int,amount+1)//初始化切片,cnt(i)表示i块钱所需的硬币数
	for _,v:=range coins{	//0是默认状态,表示无法凑成。
        if amount>=v{
		    cnt[v]=1	//凑硬币面值只需一枚硬币
        }
	}
	for i:=1;i<=amount;i++{
		if cnt[i]==0{//如果当前金额未计算
			for _,v:=range coins{//对于每个硬笔面值
				if v<i&&cnt[i-v]>0{//i-v可以凑成
					if cnt[i]==0{//cnt为默认值则直接记录
						cnt[i]=cnt[i-v]+1
					}else if cnt[i-v]+1<cnt[i]{//若新硬币数更少则更新cnt
						cnt[i]=cnt[i-v]+1
					}
				}
			}
		}
	}
	if cnt[amount]==0{//0表示不得凑成
		return -1
	}
	return cnt[amount]
}
Publicado 38 artículos originales · ganado elogios 0 · Vistas 1035

Supongo que te gusta

Origin blog.csdn.net/Cyan1956/article/details/104728056
Recomendado
Clasificación