题目描述
解决方案
动态规划
我们定义 d p [ i ] dp[i] dp[i]表示和为 i i i的硬币种类数。那么 d p [ 0 ] = 1 dp[0]=1 dp[0]=1。对于每一类硬币值 c o i n _ v a l coin\_val coin_val,有 d p [ i ] = d p [ i − c o i n _ v a l ] dp[i]=dp[i-coin\_val] dp[i]=dp[i−coin_val]。这么做的目的是为了到重复的情况。最后代码如下:
class Solution {
public:
int change(int amount, vector<int>& coins) {
vector<int> dp(amount + 1);
dp[0] = 1;
for (int& coin : coins) {
for (int i = coin; i <= amount; i++) {
dp[i] += dp[i - coin];
}
}
return dp[amount];
}
};