Coin Change
Tu as une quantité illimitée de pièces de quelques valeurs différentes, et tu veux payer un montant exact en utilisant le moins de pièces possible.
Prendre la plus grosse pièce qui convient semble être une bonne idée, mais cela peut échouer. Avec les pièces [1, 3, 4] et un montant de 6, prendre d’abord la plus grosse pièce donne 4 + 1 + 1, soit trois pièces, alors que 3 + 3 n’en nécessite que deux.
Une méthode plus sûre consiste à construire la réponse à partir des petits montants. Soit fewest[t] le nombre minimal de pièces dont la somme est t. Payer 0 ne nécessite aucune pièce. Pour tout autre t, la dernière pièce utilisée a une certaine valeur c, et le montant restant avant de l’utiliser est t - c, donc
fewest[t] = 1 + the smallest fewest[t - c] parmi toutes les pièces c dont la valeur n’est pas supérieure à t.
Pour [1, 3, 4] : fewest[3] = 1, et fewest[6] = 1 + fewest[3] = 2. Si aucune pièce ne permet d’atteindre un montant réalisable, t ne peut pas être payé.
Écrivez une fonction nommée coinChange qui reçoit coins, une liste de valeurs de pièces distinctes, et un entier amount, puis renvoie le nombre minimal de pièces dont la somme est exactement égale à amount. Chaque valeur de pièce peut être utilisée autant de fois que vous le souhaitez. Renvoyez -1 si le montant ne peut pas être obtenu, et 0 lorsque amount vaut 0.
Par exemple, coins = [2, 5, 10] et amount = 27 renvoient 4 (10 + 10 + 5 + 2), et coins = [4, 6] avec amount = 7 renvoient -1.
Contraintes : 1 <= coins.length <= 12, 1 <= coins[i] <= 10^4, toutes les valeurs sont distinctes, 0 <= amount <= 10^4.
Fonction
- arg1integer-array
- arg2integer
- Renvoieinteger
Exemples
- Entrée
- arg1 = [2, 5, 10]arg2 = 27
- Sortie
- 4
- Entrée
- arg1 = [4, 6]arg2 = 7
- Sortie
- -1
- Entrée
- arg1 = [3, 7]arg2 = 0
- Sortie
- 0
+12 tests cachés à la soumission
Indices
Ouvrez-les un par un. Chacun en dévoile un peu plus.
Prendre toujours la plus grande pièce qui convient ne donne pas toujours le nombre minimal de pièces. Essaie avec les pièces
[1, 3, 4]et le montant6.Supposons que tu connaisses déjà le nombre minimal de pièces pour chaque montant inférieur à
t. À partir de quels montants inférieurs peut-on atteindretavec une pièce de plus ?Remplissez un tableau
fewest[0..amount]en partant de0:fewest[0] = 0, et chaquefewest[t]vaut un de plus que le meilleurfewest[t - c]parmi les piècesc <= t. Attribuez aux montants impossibles à atteindre une valeur supérieure à toute réponse réelle, par exempleamount + 1, puis remplacez-la par-1à la fin.
Une explication complète de ce problème arrive bientôt.
Problèmes similaires
Des problèmes qui reposent sur les mêmes idées. En résoudre deux ou trois, c’est ce qui ancre un schéma.
Python
def coinChange(coins, amount):
# Écrivez le code iciCas 1
Cas 2
Cas 3
Entrée
arg1 = [2, 5, 10] arg2 = 27
Attendu
4