Coin Change
لديك عدد غير محدود من العملات المعدنية ذات قيم مختلفة قليلة، وتريد دفع مبلغ محدد باستخدام أقل عدد ممكن من العملات.
قد يبدو اختيار أكبر عملة لا يتجاوز مقدارها المبلغ مناسبًا، لكنه قد لا ينجح. باستخدام العملات [1, 3, 4] ومبلغ قدره 6، يؤدي اختيار أكبر عملة أولًا إلى 4 + 1 + 1، أي ثلاث عملات، بينما لا يتطلب 3 + 3 سوى عملتين.
الطريقة الأكثر أمانًا هي بناء الإجابة انطلاقًا من المبالغ الصغيرة. لتكن fewest[t] أقل عدد من العملات التي مجموعها t. دفع 0 لا يتطلب أي عملات. لأي قيمة أخرى من t، تكون قيمة العملة الأخيرة التي تستخدمها هي c، والمبلغ المتبقي قبل استخدامها هو t - c، لذا
fewest[t] = 1 + the smallest fewest[t - c] من بين كل عملة c لا تزيد قيمتها على t.
بالنسبة إلى [1, 3, 4]: fewest[3] = 1، وfewest[6] = 1 + fewest[3] = 2. إذا لم تؤدِّ أي عملة إلى مبلغ يمكن تكوينه، فلا يمكن دفع t على الإطلاق.
اكتب دالة باسم coinChange تستقبل coins، وهي قائمة بقيم عملات مميزة، وعددًا صحيحًا amount، وتُرجع أقل عدد من العملات التي مجموعها يساوي amount بالضبط. يمكنك استخدام كل قيمة عملة أي عدد من المرات. أرجِع -1 إذا تعذّر تكوين المبلغ، و0 عندما تكون قيمة amount هي 0.
على سبيل المثال، تُرجع coins = [2, 5, 10] وamount = 27 القيمة 4 (10 + 10 + 5 + 2)، بينما تُرجع coins = [4, 6] مع amount = 7 القيمة -1.
القيود: 1 <= coins.length <= 12, 1 <= coins[i] <= 10^4، جميع القيم مميزة، 0 <= amount <= 10^4.
الدالة
- arg1integer-array
- arg2integer
- تُرجعinteger
أمثلة
- المدخلات
- arg1 = [2, 5, 10]arg2 = 27
- المخرجات
- 4
- المدخلات
- arg1 = [4, 6]arg2 = 7
- المخرجات
- -1
- المدخلات
- arg1 = [3, 7]arg2 = 0
- المخرجات
- 0
+12 اختبارات مخفية عند الإرسال
تلميحات
افتحها واحدًا تلو الآخر. كل تلميح يكشف أكثر قليلًا.
إن اختيار أكبر عملة تناسب المبلغ لا يعطي دائمًا أقل عدد من العملات. جرّب ذلك باستخدام العملات
[1, 3, 4]والمبلغ6.افترض أنك تعرف مسبقًا أقل عدد من العملات المعدنية لكل مبلغ أصغر من
t. من أي مبالغ أصغر يمكن الوصول إلىtبإضافة عملة معدنية أخرى؟املأ جدول
fewest[0..amount]تصاعديًا بدءًا من0:fewest[0] = 0، وكل قيمةfewest[t]تساوي واحدًا زائد أفضل قيمة لـfewest[t - c]بين العملاتc <= t. علّم المبالغ التي لا يمكن الوصول إليها بقيمة أكبر من أي إجابة فعلية، مثلamount + 1، وحوّلها إلى-1في النهاية.
شرح كامل لهذه المسألة قادم قريبًا.
مسائل مشابهة
مسائل تعتمد على الأفكار نفسها. حلّ اثنتين أو ثلاث منها يثبّت النمط.
Python
def coinChange(coins, amount):
# اكتب الكود هناالحالة 1
الحالة 2
الحالة 3
المدخلات
arg1 = [2, 5, 10] arg2 = 27
المتوقع
4