动态规划之硬币找零

有面值为 1 2 3 的三种硬币,数量不限,拼凑成各种整额的面值,求使用最少的硬币。
思路:输入指定面额,第一层循环是面额,因为最坏的情况是使用1块钱的硬币凑够指定面额;
第二层循环,遍历面额的数组,看面额是否符合要求;

public static void main(String[] args) {

	//面额
	int[] coin = {5,3,1};
	//整数
	int money = 10;
	//保存每一次使用的面值
	int[] coinUsed = new int[money + 1];
	modCount(coin, coin.length, money, coinUsed);
}

private static void modCount(int[] coin, length, money, int[] coinUsed) {
	
	coinUsed[0] = 0;
	for (int cents= 1; cents<= money; cents++) {
		//使用最小面额的硬币时的次数
		int minCount = cents;
		
		for (int kind = 0; kind < length; coin++) {
			if (coin[kind] <= cents) {
				int temp = coinUsed[cents - coin[kind]] + 1;
				if (temp < minCount) {
					minCount = temp;	
				}
			}
		}
		//保存最小硬币数
		coinUsed[cents] = minCount;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值