美文网首页快乐写代码
T518、零钱兑换||

T518、零钱兑换||

作者: 上行彩虹人 | 来源:发表于2020-06-29 22:52 被阅读0次

    给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。
    示例 1:
    输入: amount = 5, coins = [1, 2, 5]
    输出: 4
    解释: 有四种方式可以凑成总金额:
    5=5
    5=2+2+1
    5=2+1+1+1
    5=1+1+1+1+1
    示例 2:
    输入: amount = 3, coins = [2]
    输出: 0
    解释: 只用面额2的硬币不能凑成总金额3。
    示例 3:
    输入: amount = 10, coins = [10]
    输出: 1
    注意:
    你可以假设:
    0 <= amount (总金额) <= 5000
    1 <= coin (硬币面额) <= 5000
    硬币种类不超过 500 种
    结果符合 32 位符号整数

    因为零钱个数无限,有些类似于爬楼梯那道题,找到转态转移方程,动态规划求解即可

        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 + 1; i++)
                    dp[i] = dp[i] + dp[i - coin];
            return dp[amount];
        }
    

    相关文章

      网友评论

        本文标题:T518、零钱兑换||

        本文链接:https://www.haomeiwen.com/subject/bqrzfktx.html