leetcode-零钱兑换[518]
题目描述
给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。
请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。
动态规划
本题与爬楼梯很相似,可以从最后一个组成面额的最后一个硬币考虑。例如组成面额5(dp[5])的最后一个硬币共有三种情况:
- 最后一枚硬币为1,dp[5-1]
- 最后一枚硬币为2,dp[5-2]
- 最后一枚硬币为5,dp[5-3]
- 状态定义:dp[n]表示组成面额n的所有组合数
- 状态转移方程:
代码实现
class Solution: def change_pailie(self, amount: int, coins: List[int]) -> int: dp = [0]*(amount+1) dp[0] = 1 #枚举金额 for i in range(1,amount+1): #枚举面额 for coin in coins: if i<coin: continue dp[i] +=dp[i-coin] # 如何去重 return dp[amount] def change_zuhe(self, amount: int, coins: List[int]) -> int: dp = [0]*(amount+1) dp[0] = 1 #枚举面额 for coin in coins: #枚举金额 for i in range(1,amount+1): if i<coin: continue dp[i] +=dp[i-coin] return dp[amount]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix