1.题目
2.题目意思
拿硬币,看看有多少种情况。
3.代码
class Solution:
def waysToChange(self, n: int) -> int:
l = [25,10,5,1]
dp = [0]*(n+1)
dp[0] = 1
for i in range(len(l)):
for j in range(l[i], n+1):
dp[j] += dp[j-l[i]]
return dp[-1]%1000000007
思路:dp~
很基础的dp题,二维状态转移方程很容易得出:
其中,
表示前i
种硬币共拿j
分有多少种方案。初始化很显然
,因为啥都拿不了,就这一种方案。然后转移方程啥意思呢?第一项
表示前i-1
种硬币共拿j
分的方案数,那我第i
种硬币不拿就是了。第二项
表示前i-1
种硬币共拿j-coins[i]
分的方案数,然后加上第i
种硬币拿coins[i]
,这样就正好是
。
最后代码上第二个for
循环逆序,可以直接将空间压缩成一维~
冲冲冲~