📅  最后修改于: 2023-12-03 14:56:30.987000             🧑  作者: Mango
问题描述:假设有面值为1元、3元、5元的硬币若干枚,需要找零n元,请问最少需要多少枚硬币?
该问题是经典的动态规划问题,可以采用自下而上的方式逐步求解。
最终返回dp[n]即可。
时间复杂度为O(n*k),其中n为找零金额,k为硬币面值数量。
def coinChange(coins, amount):
n = amount + 1
dp = [n] * n
dp[0] = 0
for i in range(1, n):
for j in range(len(coins)):
if coins[j] <= i:
dp[i] = min(dp[i], dp[i-coins[j]] + 1)
return -1 if dp[amount] > amount else dp[amount]
int coinChange(vector<int>& coins, int amount) {
vector<int> dp(amount+1, amount+1);
dp[0] = 0;
for(int i=0; i<=amount; i++){
for(int j=0; j<coins.size(); j++){
if(coins[j] <= i){
dp[i] = min(dp[i], dp[i-coins[j]]+1);
}
}
}
return dp[amount] > amount ? -1 : dp[amount];
}
## 参考链接
- [leetcode 322. Coin Change](https://leetcode.com/problems/coin-change/)
- [动态规划-硬币找零问题](https://blog.csdn.net/qq_37663900/article/details/80834073)