human
Solve in Python:
You are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest number of coins that you need to make up that amount. If that amount of money cannot be made up by any combination of the coins, return -1.
You may assume that you have an infinite number of each kind of coin.
 
Example 1:
Input: coins = [1,2,5], amount = 11
Output: 3
Explanation: 11 = 5 + 5 + 1

Example 2:
Input: coins = [2], amount = 3
Output: -1

Example 3:
Input: coins = [1], amount = 0
Output: 0

Example 4:
Input: coins = [1], amount = 1
Output: 1

Example 5:
Input: coins = [1], amount = 2
Output: 2

 
Constraints:

1 <= coins.length <= 12
1 <= coins[i] <= 231 - 1
0 <= amount <= 104
 ... Give me a Python code to compute the fewest number of coins that you need to make up that amount?
assistant
#Here is Python code to compute the fewest number of coins that you need to make up that amount.

class Solution:
    def coinChange(self, coins: List[int], amount: int) -> int:
        coins.sort(reverse = True)
        min_coins = float('inf')

        def count_coins(start_coin, coin_count, remaining_amount):
          nonlocal min_coins

          if remaining_amount == 0:
            min_coins = min(min_coins, coin_count)
            return

          # Iterate from largest coins to smallest coins
          for i in range(start_coin, len(coins)):
            remaining_coin_allowance = min_coins - coin_count
            max_amount_possible = coins[i] * remaining_coin_allowance

            if coins[i] <= remaining_amount and remaining_amount < max_amount_possible:
              count_coins(i, coin_count + 1, remaining_amount - coins[i])

        count_coins(0, 0, amount)
        return min_coins if min_coins < float('inf') else -1