leetcode 518. 零钱兑换 II medium
题目描述:
给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。
示例 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
解题思路:
完全背包,求方案数,注意初始值的设置就ok
代码:
//
class Solution {
public:
int change(int amount, vector<int>& coins) {
// 这特殊情况就nm离谱
if(amount==0)
return 1;
if(coins.empty())
return 0;
vector<int> dp(amount+1,0);
dp[0]=1; // 除了dp【0】=1,其他都是0
for(auto coin:coins){
for(int i=coin;i<=amount;++i){
dp[i]=dp[i]+dp[i-coin];
}
}
return dp[amount];
}
};

本文详细解析了LeetCode上经典问题“零钱兑换II”的解决方案,通过完全背包算法求解给定硬币面额下凑成总金额的不同组合数。文章提供了清晰的解题思路及C++代码实现。

564

被折叠的 条评论
为什么被折叠?



