「LeetCode每日一题」—— LCCI.08.11. 硬币
LCCI.08.11. 硬币
链接:https://leetcode-cn.com/problems/coin-lcci/
难度:中等
题目
点击原文链接跳转查看题目
思路
这题是完全背包问题,因为每种硬币的数量都是无限。
我们用动态规划来做,设dp[i][j]为遍历到当下这个硬币时,组成金额j的方法数目。
在后面我们有两种可能
1.当前硬币没有取,dp[i][j] = dp[i-1][j]
2.当前硬币取了,dp[i][j] = dp[i][j-coins[i[]]
状态转移方程:
dp[i][j]=dp[i-1][j]+dp[i][j-coins[i]]
上面的转移方程可以把第一个维度去掉,变成:
dp[j]=dp[j]+dp[j-coins[i]]
然后设置初始化条件dp[0]=1,代表0(没有硬币)也是一种情况。
代码见解决方案。
方案代码
解决方案:
class Solution:
def waysToChange(self, n: int) -> int:
coins = [1, 5, 10, 25]
dp = [0] * (n + 1)
dp[0] = 1
for coin in coins :
for i in range(coin, n + 1) :
dp[i] = dp[i] + dp[i - coin]
return dp[n] % 1000000007
原创文章,作者:flypython,如若转载,请注明出处:http://flypython.com/algorithm/leetcode/348.html
您必须登录才能发表评论。