class Solution {
public:
int change(int amount, vector<int>& coins) {
int len = coins.size();
vector<vector<int>> dp(len + 1, vector<int>(amount + 1, 0));
dp[0][0] = 1;
for (int i = 1; i <= len; ++i) {
for (int j = 0; j <= amount; ++j) {
dp[i][j] = dp[i - 1][j];
if (j - coins[i - 1] >= 0) {
dp[i][j] += dp[i][j - coins[i - 1]];
}
}
}
return dp[len][amount];
}
};

本文深入探讨了零钱兑换问题的动态规划解决方案,通过一个C++实现的示例,详细解释了如何计算出组成特定金额所需的硬币组合数。代码中使用了二维动态规划数组,清晰地展示了状态转移的过程。
1227





