給定一組硬幣的面額,以及要找零的錢數(shù),計(jì)算出符合找零錢數(shù)的最少硬幣數(shù)量。
例如,美國(guó)硬幣面額有1、5、10、25這四種面額,如果要找36美分的零錢,則得出的最少硬幣數(shù)應(yīng)該是1個(gè)25美分、1個(gè)10美分和1個(gè)10美分共三個(gè)硬幣。這個(gè)算法要解決的就是諸如此類的問(wèn)題。我們來(lái)看看如何用動(dòng)態(tài)規(guī)劃的方式來(lái)解決。
對(duì)于每一種面額,我們都分別計(jì)算所需要的硬幣數(shù)量。具體算法如下:
示意圖
方案4的硬幣總數(shù)最少,因此為最優(yōu)方案。
具體的代碼實(shí)現(xiàn)如下:
function minCoinChange(coins, amount) { let result = null; if (!amount) return result; const makeChange = (index, value, min) => { let coin = coins[index]; let newAmount = Math.floor(value / coin); if (newAmount) min[coin] = newAmount; if (value % coin !== 0) { makeChange(--index, value - coin * newAmount, min); } }; const arr = []; for (let i = 0; i < coins.length; i++) { const cache = {}; makeChange(i, amount, cache); arr.push(cache); } console.log(arr); let newMin = 0; arr.forEach(item => { let min = 0; for (let v in item) min += item[v]; if (!newMin || min < newMin) { newMin = min; result = item; } }); return result; }
文章題目:js貪心算法錢幣找零問(wèn)題代碼實(shí)例-創(chuàng)新互聯(lián)
瀏覽地址:http://jinyejixie.com/article10/dssgdo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、品牌網(wǎng)站建設(shè)、商城網(wǎng)站、虛擬主機(jī)、定制開發(fā)、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容