Given an array of coin denominations coins and an integer amount, return the fewest number of coins needed to make up that amount. If no combination of coins can make the amount, return -1.
You may use each coin denomination an unlimited number of times.
Input: coins = [1, 5, 10, 25], amount = 36 Output: 3 Explanation: 25 + 10 + 1 = 36, requiring 3 coins.
Input: coins = [2], amount = 3 Output: -1 Explanation: No combination of 2s can sum to 3 (odd number).
Input: coins = [1], amount = 0 Output: 0 Explanation: Amount is already zero - no coins needed.
coins = [1, 5, 10, 25], amount = 36