leetcode-零钱兑换[322]

 


题目描述

给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。
计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。
你可以认为每种硬币的数量是无限的。

输入:coins = [1, 2, 3], amount = 6
输出:2
解释:6 = 3 + 3

动态规划

我们采用自下而上的方式,仍定义 F(i)F(i) 为组成金额 ii 所需最少的硬币数量,假设在计算 F(i) 之前,我们已经计算出 F(0)F(i1)的答案。 则 F(i)对应的转移方程应为:

F(i)=minj=0...n1F(icj)+1

其中,其中cj代表的是第 j 枚硬币的面值

示例

image

F(3)=min(F(3c1),F(3c2),F(3c3))+1=min(F(31),F(32),F(33))+1=min(F(2),F(1),F(0))+1=min(1,1,0)+1=1

代码实现

class Solution:
def coinChange(self, coins: List[int], amount: int) -> int:
dp = [float('inf')] * (amount + 1)
dp[0] = 0
for i in range(1, amount + 1):
for coin in coins:
if coin <=i:
dp[i] = min(dp[i], dp[i - coin] + 1)
return dp[amount] if dp[amount] != float('inf') else -1
posted @   topbookcc  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
/* 鼠标点击求赞文字特效 */
点击右上角即可分享
微信分享提示