js最少硬币找零问题

给定钱币的面值 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))

  

猜你喜欢

转载自www.cnblogs.com/muamaker/p/9284350.html