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];
}
};