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)的主要内容,如果未能解决你的问题,请参考以下文章