You are given an array coins, where each element is a coin denomination, and an integer amount.
coins
amount
Each coin can be used any number of times.
Return the smallest number of coins required to make exactly amount. If it is not possible to form amount, return -1.
-1
You are given an array `coins`, where each element is a coin denomination, and an integer `amount`.