思路展示

初始化 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];

    }
};

效果展示

LeetCode---322.零钱兑换_算法