码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 518. Coin Change 2

时间:2018-11-09 22:52:32      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:each   hang   递推   例子   递推公式   就是   style   class   公式   

一看就是用dp来做,但是这道题还是有点意思的。

dp[i] = sum_{coin} dp[i-coin]

上述的递推公式看似很对,但是会把重复的情况都考虑进去。举个例子,算dp[5]的时候,dp[5]=dp[0]+dp[4]+dp[3],但是之前算的dp[4]就是从dp[3]计算得到的。

解决办法是,一个一个硬币更新dp,即 dp[i] += dp[i-coin] for each coin。这样,对于当前的coin,dp[i-coin] 一定是不会包含当前coin的。

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

 

LeetCode 518. Coin Change 2

标签:each   hang   递推   例子   递推公式   就是   style   class   公式   

原文地址:https://www.cnblogs.com/hankunyan/p/9937405.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!