力扣 322. 零钱兑换

68 阅读1分钟

🔗 leetcode.cn/problems/co…

题目

  • 有面值为 coins 的硬币
  • 返回最少硬币数,其和为 amount,如果达成不了,返回 -1

思路

  • dp
  • 达成当前 amount,是每一个 coins 面值的硬币数的最小值 + 1

代码

class Solution {
public:
    int coinChange(vector<int>& coins, int amount) {
        vector<int> dp(amount+1);
        dp[0] = 0;
        for (int i = 1; i <= amount; i++) {
            dp[i] = -1;
            for (int j = 0; j < coins.size(); j++) {
                int c = coins[j];
                if (i- c >= 0 && dp[i-c] >= 0) {
                    if (dp[i] == -1) dp[i] = dp[i-c] + 1;
                    else dp[i] = min(dp[i], dp[i-c] + 1);

                }
            }
            
        }
        
        return dp[amount];

        
    }
};