例题:
假如有 2 块,3 块,7 块面额的纸币,如何使用最小的纸币数量来凑成 100 块。 答案:15
动态规划方程:
前十项表格:
相信你们看完这俩张图就有一点懂了,数组c存的是最少钱数,i代表钱,数组value代表钱的种类,就像堆积木一样,打好地基,后面的直接调用就行了,下面源码也简单,仅供参考。测试用的没删,但是运行出来很直观。
力扣https://leetcode-cn.com/problems/coin-change/submissions/
class Solution {
public int coinChange(int[] money, int num) {
if(num==0){
return 0;
}
int size = money.length;
int mon[] = new int[num+1];
for (int i = 1; i <= num; i++) {
int min = Integer.MAX_VALUE;
for (int j=0;j<size;j++) {
if(i - money[j] == 0){
min = 1;
}else if (i - money[j] > 0&&mon[i-money[j]]!=0) {
min =Math.min(mon[i-money[j]]+1,min);
}
}
mon[i] = min==Integer.MAX_VALUE?0:min;
}
return mon[num]==0?-1:mon[num];
}
}