function coinChange(coins, amount):
dp = array of size (amount + 1)
fill dp with infinity
dp[0] = 0 // base case
for i from 1 to amount:
for coin in coins:
if i >= coin:
dp[i] = min(dp[i], dp[i-coin] + 1)
return dp[amount] if dp[amount] != infinity else -1