给定钱币的面值 1、5、10、25
需要找给客户 36
最少找零数为: 1、10、25
function MinCoinChange(coins){ var coins = coins; var cache = {}; this.makeChange = function(amount){ var me = this; if(!amount){ return []; } if(cache[amount]){ return cache[amount]; } var min = [],newMin,newAmount; for(var i= 0; i < coins.length; i++){ var coin = coins[i]; newAmount = amount - coin; if(newAmount >= 0){ newMin = me.makeChange(newAmount); } if( newAmount >= 0 && //差值大于等于0 (newMin.length < min.length -1 || !min.length ) && //获取到的组合长度小于当前组合,或者当前组合为空 (newMin.length || !newAmount) //获取到的组合有值或者差值为0 ){ min = [coin].concat(newMin); console.log("new min "+min+"for"+amount); } } return (cache[amount] = min); } } var test = new MinCoinChange([1,5,10,25]); console.log(test.makeChange(36))