LeetCode 518. Coin Change 2
Posted 約束の空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 518. Coin Change 2相关的知识,希望对你有一定的参考价值。
一看就是用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的主要内容,如果未能解决你的问题,请参考以下文章