Leetcode322. 零钱兑换(dp)

Posted !0 !

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode322. 零钱兑换(dp)相关的知识,希望对你有一定的参考价值。

题目链接:https://leetcode-cn.com/problems/coin-change/

解题思路

我们可以用dp[i]表示金额为i所需最少的硬币,这样我们可以枚举coins[]数组,更新dp[i]

代码

class Solution {
    public int coinChange(int[] coins, int amount) {
        int[] dp = new int[amount + 1];
        dp[0] = 0;  //凑成金额为0的硬币数为0
        for(int i = 1; i <= amount; i++) {  //枚举每个金额所需的最小硬币数
            dp[i] = amount + 1;     //初始化
            for(int j = 0; j < coins.length; j++) { //枚举每枚硬币
                if(coins[j] <= i)   //如果该硬币面值小于要凑的金额数
                    dp[i] = Math.min(dp[i - coins[j]] + 1, dp[i]);  //更新组成该金额的最少硬币数
            }
        }
        return dp[amount] > amount ? -1 : dp[amount];   //如果amount金额还是等于初始化的值,代表组成不了该金额
    }
}

复杂度分析

  • 时间复杂度:O(s * n),其中s是金额,n是面额数
  • 空间复杂度:O(s)

以上是关于Leetcode322. 零钱兑换(dp)的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode]322. 零钱兑换(DP)

动态规划解题(leetcode322零钱兑换)

java刷题--322零钱兑换

ARTS - 21 LeetCode 322 零钱兑换 | 分布式系统经典学习资料

leetcode 322 零钱兑换

Leetcode.322-零钱兑换(动态规划)