/**
* 518. 零钱兑换 II
*
* 动态规划 排列组合中组合问题
* 注意点:
* 1 选取的次数不限制
* 2 排列方式对结果无影响
* 动态规划问题
* 1 边界条件 dp[0] = 1 金额为0的组合方式只有一种 不放金币
* 2 dp[i] 中i代表当前金额
* 3 coins必须有序(题目已给出),金币按指定顺序选取防止金币顺序对结果的影响
* 因为外层循环是遍历数组 coins 的值,内层循环是遍历不同的金额之和,
* 可以确保金额之和等于 i 的硬币面额的顺序,由于顺序确定,因此不会重复计算不同的排列。
*/
public class Solution518 {
public int change(int amount, int[] coins) {
int[] dp = new int[amount + 1];
dp[0] = 1;
for (int coin : coins) {
for (int i = coin; i <= amount; i++) {
dp[i] += dp[i - coin];
}
}
return dp[amount];
}
}
LeetCode--518. 零钱兑换II
最新推荐文章于 2024-04-10 23:34:44 发布