You are given an integer array
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
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
Solution
Array 求極值,先來嘗試 DP 的解法
定義 dp[i] : amount = i 時,所需要的最少 coin 數
按照定義,dp[0] = 0,因為 amount = 0 時,不需要任何 coins
接下來看推導公式,以 dp[7],coins = [1,5] 為例
現在要計算 dp[7],能選擇的 coins 是 1 或 5
那可以看成,dp[6] 加上一枚 coin 1,或者 dp[2] 加上一枚 coin 5
因此,可以推導出,dp[i] = max(dp[i], dp[amoun - coin] + 1)
kotlin
沒有留言:
張貼留言