零钱兑换问题 python 动态规划

https://www.cnblogs.com/FYZHANG/p/11854433.html
参考官方第三种解法,自下而上
https://leetcode-cn.com/problems/coin-change/solution/322-ling-qian-dui-huan-by-leetcode-solution/
labuladong的动态规划做题思路
https://leetcode-cn.com/problems/coin-change/solution/322-ling-qian-dui-huan-by-ac_fun-afrb/
https://leetcode-cn.com/problems/fibonacci-number/solution/dong-tai-gui-hua-tao-lu-xiang-jie-by-labuladong/
写出状态转移方程
在这里插入图片描述
这个题目应该是正序的,当我们计算到f[x]时,f[x-1],f[x-2],f[x-5]都已经得到结果了

class Solution(object):
    def coinChange(self, coins, amount):
        """
        :type coins: List[int]
        :type amount: int
        :rtype: int
        """
        # 1.确定base case
        dp = [amount+1]*(amount+1)
        dp[0] = 0
        # 2.从面值为1开始,计算其最优dp值
        for coin in coins:
            for  i in range(coin, amount+1):
                dp[i] = min(dp[i], dp[i - coin] + 1)
        return dp[amount] if dp[amount] != amount+1 else -1



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于 Python零钱兑换,我可以给你提供一些基本的代码示例,并加上注释: ```python # 定义函数,参数为需要兑换的钱数和零钱的面额列表 def change_money(amount, coins): # 初始化动态规划数组,长度为需要兑换的金额数+1 dp = [0] * (amount + 1) # 第一个位置默认值为0 dp[0] = 1 # 遍历所有零钱面额 for coin in coins: # 遍历需要兑换的金额数 for i in range(coin, amount + 1): # 更新动态规划数组的值 dp[i] += dp[i - coin] # 返回最后一个位置的值 return dp[-1] # 测试代码 amount = 10 coins = [1, 2, 5] print(change_money(amount, coins)) # 输出:10 ``` 以上代码利用动态规划的思路解决了零钱兑换问题。下面是注释的详细解释: 1. 定义函数,参数为需要兑换的钱数和零钱的面额列表 ```python def change_money(amount, coins): ``` 2. 初始化动态规划数组,长度为需要兑换的金额数+1,第一个位置默认值为0 ```python dp = [0] * (amount + 1) dp[0] = 1 ``` 3. 遍历所有零钱面额 ```python for coin in coins: ``` 4. 遍历需要兑换的金额数 ```python for i in range(coin, amount + 1): ``` 5. 更新动态规划数组的值,利用 dp[i] += dp[i - coin] 的公式 ```python dp[i] += dp[i - coin] ``` 6. 返回最后一个位置的值 ```python return dp[-1] ``` 7. 测试代码 ```python amount = 10 coins = [1, 2, 5] print(change_money(amount, coins)) # 输出:10 ``` 以上就是针对 Python零钱兑换的详细介绍和代码示例,希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值