LeetCode 面试题 08.11. 硬币(dp)
题目链接:硬币
硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007)
示例1:
输入: n = 5
输出:2
解释: 有两种方式可以凑成总金额:
5=5
5=1+1+1+1+1
示例2:
输入: n = 10
输出:4
解释: 有四种方式可以凑成总金额:
10=10
10=5+5
10=5+1+1+1+1+1
10=1+1+1+1+1+1+1+1+1+1
说明:
注意:
你可以假设:
- 0 <= n (总金额) <= 1000000
思路
类似于完全背包,求方案数。
定义dp[n]
表示用这些硬币凑成面额为n
的方案数。如果需要凑出一个面额,假设当前硬币面额为v[i]
,则方案数可以累加为:dp[n]+=dp[n-v[i]]
,代表用已知的可以凑成n-v[i]
面额的方案数加上当前的硬币面额,可以凑出n
。
时间复杂度:$O(n)$
代码
|
|
最后修改于 2020-04-23
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。