LeetCode--518. 零钱兑换II

/**
 * 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];
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值