动态规划-最小硬币找零

 最少硬币找零问题是硬币找零问题的一个变种。硬币找零问题是给出要找零的钱数,

以及可用的硬币面额d1 …dn 及其数量,找出有多少种找零方法。最少硬币找零问题是给出要找零的钱数,

以及可用的硬币面额d1 …dn 及其数量,找到所需的最少的硬币个数。

 

 

// 最小硬币找零
    function MinCoinChange(coins) {
      var coins = coins; //{1}
      var cache = {}; //{2}
      this.makeChange = function (amount) {
        var me = this;
        console.log(amount,'amount')
        if (!amount) { //{3}
          return [];
        }
        if (cache[amount]) { //{4}
          return cache[amount]; 
        }
        var min = [], newMin, newAmount;
        for (var i = 0; i < coins.length; i++) { //{5}
          var coin = coins[i];
          newAmount = amount - coin; //{6}
          if (newAmount >= 0) {
            newMin = me.makeChange(newAmount); //{7}
            console.log(newAmount, 'newAmount' , newMin, amount , 'amount')
          }
          if (
            newAmount >= 0 && //{8}
            (newMin.length < min.length - 1 || !min.length)//{9}
            && (newMin.length || !newAmount)) //{10} 判断newAmount是否有效,minValue (最少硬币数)是否是最优解,与此同时minValue和newAmount是否是合理的值
          {
            min = [coin].concat(newMin); //{11}
            console.log('new Min ' + min + ' for ' + amount);
          }
        }
        console.log(amount, min, 'cache')
        return (cache[amount] = min); //{12}
      };
    }

 

codepen链接

https://codepen.io/pprachel/pen/NejOKK?editors=1111

 

转载于:https://www.cnblogs.com/ppxyq/p/10169680.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值