思路展示
初始化 dp 数组:
当金额为 0 时,不需要任何硬币,所以 dp[i][0] = 0。
当使用任意种类的硬币凑成金额 0 时,都无法凑成,所以 dp[0][j] = INT_MAX
示例代码
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
int len=coins.size(),val;
vector<vector<int>> dp(len+1,vector<int>(amount+1,INT_MAX-1));
// 初始化 dp 数组
for (int i = 0; i <= len; ++i) {
dp[i][0] = 0;
}
for(int i=1;i<=len;i++){
for(int j=1;j<=amount;j++){
val=coins[i-1];
if(j>=val){
dp[i][j]=min(dp[i-1][j],dp[i][j-val]+1);
}else{
dp[i][j]=dp[i-1][j];
}
}
}
return dp[len][amount]==(INT_MAX-1)?-1:dp[len][amount];
}
};
效果展示