Coin Change

Problem page:https://leetcode.com/problems/coin-change

Solution

class Solution:
    def coinChange(self, coins: List[int], amount: int) -> int:
        min_coins = [amount + 1] * (amount + 1)
        min_coins[0] = 0

        for i in range(1, amount + 1):
            for c in coins:
                if i - c >= 0:
                    min_coins[i] = min(min_coins[i], 1 + min_coins[i - c])

        return min_coins[-1] if min_coins[-1] != amount + 1 else -1

Complexity

  • time: O(n * m) n is the length of coins, m is amount
  • space: O(m)