宝哥软件园

js贪婪算法硬币兑换问题代码示例

编辑:宝哥软件园 来源:互联网 时间:2021-08-20

给定一组硬币的面额和零钱的数量,计算满足零钱数量的硬币的最小数量。

例如,美国硬币有四种面额:1、5、10和25。如果你想换36美分,最小硬币数应该是三个硬币:一个25美分,一个10美分,一个10美分。这个算法就是为了解决这样的问题。让我们看看如何通过动态编程来解决这个问题。

对于每种面额,我们分别计算所需的硬币数量。具体算法如下:

如果使用所有便士,总共需要36枚硬币。如果用五分镍币,需要七个五分镍币,一个五分镍币=八个硬币。如果用五分镍币,三个五分镍币,一个五分镍币,一个五分镍币=五个硬币。如果使用镍币,需要四分之一。

方案4的硬币总数最少,所以是最好的方案。

具体的代码实现如下:

函数minCoinChange(硬币,金额){ let result=nullif(!金额)返回结果;const makeChange=(index,value,min)={ let coin=coins[index];让newAmount=Math.floor(值/硬币);if(new mount)min[coin]=new mount;if(价值%硬币!==0) { makeChange(- index,value-coin * new mount,min);} };const arr=[];for(设I=0;一、硬币长度;I){ const cache={ };makeChange(i,金额,缓存);arr.push(缓存);} console . log(arr);设newMin=0;arr . foreach(item={ let min=0;for(让v在项中)min=项[v];if(!newMin | | min newMin){ newMin=min;结果=项目;} });返回结果;}函数minCoinChange()接收一组硬币的面额和要兑换的金额。我们在上面的例子中传递了这些值:

const result=minCoinChange2([1,5,10,25],36);console.log(结果);获得以下结果:

[ { '1': 36 },{ '1': 1,' 5': 7 },{ '1': 1,' 5': 1,' 10': 3 },{ '1': 1,' 10': 1,' 25': 1 }]{ '1': 1,上面的数组' 10': 1,' 25 '最后,我们将计算arr数组中硬币总数最少的方案作为minCoinChange()函数的输出。

当然,在实际应用中,我们可以将硬币抽象成任何你需要的数字,而这个算法可以给你最小组合的满意结果。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

更多资讯
游戏推荐
更多+