You are given coins of different denominations and a total amount of money amount. Write a function to compute 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.
给你一些硬币,要你求出通过组合这些硬币,来凑到题目给你的钱的数量(词穷,实在不会翻译)。return硬币数量最少的情况。如果不能通过这些硬币来凑到这个钱,return -1。
首先我们看到fewest number of coins,就要知道这是一个dp的题目,因为随着钱的面额的增大,我们都是要从之前的情况(最少硬币)下手。也就是说,这道题的最终答案跟每一个之前的答案都是有关系的。所以是dp。
第一,创建一个dp数组,应该是比amount的大小更大一个。常规操作。
第二,把dp数组每个元素初始化为amount + 1,这样可以用于之后的判定,看看从这些给的硬币中可不可以凑齐想要的钱。
第三,对于if(coins[j] <= i) 这个if statement在检查题目给我们的硬币的大小是不是比我们遍历dp的钱的数量小。譬如我们遍历DP[1]的时候:这个时候我们检查的是最少多少个硬币可以凑齐一块钱,又假如我们的coins最小是两块钱,这个时候我们就不可以对dp[1]的数据进行更改,会越界。所以我们应该跳过dp[1]ÿ