给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。
请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。
假设每一种面额的硬币有无限个。
题目数据保证结果符合 32 位带符号整数。
分析:硬币的数量为无限个而不是只有1个,这便是完全背包问题,同时,我们要求的是组合数,那么递推公式为dp[i]+=dp[i-weight[j]]
注意,为防止混淆,背包问题最好都是先遍历物品再遍历背包,但同时也要明白为何要这么做。
参考代码:
public int change(int amount, int[] coins) {
int[] dp = new int[amount+1];
dp[0]=1;
for(int i=0;i
dp[j]+=dp[j-coins[i]];
}
}
return dp[amount];
}
