LeetCode 题解:518. 零钱兑换 II,动态规划,JavaScript,详细注释
原题链接:518. 零钱兑换 II
解题思路:
假设输入:
amount = 5, coins = [1, 2, 5]
,如果用长度为amount + 1
的dp
数组递推,需要满足如下特性:
* 如果用长度为amount + 1
的dp
数组递推。
* 每个索引代表了递推到的金额。
* 每个元素是硬币组合数。
* 0
位置是初始状态,设置为1
,表示都从1
种组合数开始递推。
我们可以将其按照硬币种类拆分递推结果:
* 硬币1
:[1,1,1,1,1,1]
* 硬币2
:[1,0,1,0,1,0]
* 硬币5
:[1,0,0,0,0,1]
* 硬币1
、2
:[1,1,2,2,3,3]
* 硬币1
、2
、5
:[1,1,2,2,3,4]
递推方法如下:
* 依次计算每个硬币面额coin
的递推结果。
* 当前金额i
,是从i - coin
添加了coin
而来。
* 当前新的硬币组合数dp[i]
,等于上一种硬币递推到i
的组合数dp[i]
,加上i - coin
的组合数dp[i - coin]
而来。
* 状态转移方程为:dp[i] = dp[i] + dp[i - coin]
。
复制代码
版权声明: 本文为 InfoQ 作者【Lee Chen】的原创文章。
原文链接:【http://xie.infoq.cn/article/180956b6f18a2d13c85b258ca】。文章转载请联系作者。
评论