【 LeetCode 322】零钱兑换(中等) 动态规划

题目:

【 LeetCode 322】零钱兑换(中等) 动态规划_第1张图片


思路:

dp[i] 表示 组成 i 元钱时需要的最少硬币数。

状态转移方程:dp[j]=min(dp[j],dp[j-coins[i]]+1);

用当前硬币coins[i],dp等于减去该硬币面值时的dp加上当前硬币数1,不断比较,取最小值。


代码:

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

【 LeetCode 322】零钱兑换(中等) 动态规划_第2张图片

你可能感兴趣的:(LeetCode)