LeetCode 322. Coin Change 解答

2019/02/13 难度 Medium 主题

视频讲解

代码

class Solution:

    def coinChange(self, coins: List[int], amount: int) -> int:
        
        
        """
        Solution-1: Recurtsion with memory
        """

        # mem = {}

        
        # def helper(coins, amount) -> int:
                
        #     if amount in mem: return mem[amount]
            
        #     if amount == 0: 
        #         mem[amount] = 0
        #         return 0
            
        #     res = sys.maxsize - 1
            
        #     for coin in coins:
        #         if amount >= coin: 
        #             this_res = helper(coins, amount - coin)
        #             if this_res == -1: 
        #                 continue
        #             else:
        #                 res = min(res, this_res + 1)
            
        #     if res == sys.maxsize-1:
        #         mem[amount] = -1
        #         return -1
            
        #     mem[amount] = res
        #     return res
        
        # return helper(coins, amount)   



        """
        Solution-2: Dynamic Programming.
        """

        dp = [sys.maxsize-1] * (amount + 1)
        dp[0] = 0
        for i in range(amount + 1):
            if dp[i] == sys.maxsize-1:
                continue
            for coin in coins:
                if coin + i <= amount:
                    dp[coin + i] = min(dp[coin+i], dp[i] + 1)
        if dp[-1] == sys.maxsize-1: return -1
        return dp[-1]

PPT讲解

本题涉及的知识点:

  • [()][]

我的 Leetcode 讲解频道

代码链接

面试高频考点Youtube链接

面试低频考点Youtube链接

站内搜索 | Search


    视频 | Video Links

    Table of Contents