力扣 | 322. 零钱兑换

第一次完完整整的用py写代码,而且是动态规划,虽然这是一个最最基础的动态规划,但是ac的时候还是好开心,先不到人生中第一个一发ac的动态规划是用py过的


 

给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。

示例 1:

输入: coins = [1, 2, 5], amount = 11
输出: 3
解释: 11 = 5 + 5 + 1
示例 2:

输入: coins = [2], amount = 3
输出: -1
说明:
你可以认为每种硬币的数量是无限的。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/coin-change

'''
@Modify Time      @Author   
------------      -------    
2019/11/18 14:30   laoalo    
'''
class Solution(object):
    def coinChange(self, coins, amount):
        """
        :type coins: List[int]
        :type amount: int
        :rtype: int
        """
        f = [float("inf")]*(amount+1) # 初始化为无穷大
        f[0]=0
        for i in range(1,amount+1):
            for j in coins:
                # print(">>",i,"=",f[i-j],"+",f[i])
                if i>=j:
                    f[i]=min(f[i-j]+1,f[i])
            # print( i ,"=",f[i])

        if f[amount] == float('inf'):
            return -1
        return f[-1]

a = Solution()
print(a.coinChange([2,5,7],27))

 

posted @ 2019-11-18 14:48  东坡肉肉君  阅读(199)  评论(0编辑  收藏  举报