原题链接:
https://leetcode.cn/problems/coin-change-ii/description/
完成情况:
解题思路:
这段代码是一个找零钱的函数,参数为总金额amount和硬币面额数组coins。函数通过动态规划的方法计算出组成总金额amount的所有可能方式数量,并返回结果。
首先创建一个长度为amount+1的数组dp,用来存储组成不同金额的方式数量。将dp[0]初始化为1,表示没有amount时也有一种方式实现,即什么都不放。
然后通过两层循环遍历所有硬币面额和目标金额。在内层循环中,计算组成金额j的方式数量,通过dp[j] += dp[j - coins[i]]来更新dp数组。
最后返回dp[amount],即总金额amount的所有可能方式数量。
参考代码:
package leetcode板块;
public class _518零钱兑换II_dp {
/**
*
* @param amount
* @param coins
* @return
*/
public int change(int amount, int[] coins) {
int [] dp = new int[amount + 1];
//初始化模拟出所有金额的给出方案
//dp[0]即,没有amount时,认为有一种方案实现,即我也什么都不放
dp[0] = 1;
for (int i = 0; i < coins.length; i++) { //所有金币
for (int j = coins[i];j<=amount;j++){ //目标指定金额
dp[j] += dp[j - coins[i]];
}
}
return dp[amount];
}
}