
You are given an integer array coins representing coins of different denominations and an integer amount representing a total amount of money.
Return 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.
1 <= coins.length <= 121 <= coins[i] <= 2 ^31 - 10 <= amount <= 10 ^4