322. Coin Change

该题要使用动态规划,参考了链接:

https://blog.csdn.net/happyaaaaaaaaaaa/article/details/50976088

中的第二种方法,主要思路是用一个数组dp来存储硬币的数量,例如数组中第 i 个元素就保存达到目标金额为 i 的最少硬币数,凑齐钱数amount最少的硬币数为 固定钱数coins[j] 的一枚硬币,其余钱数为 amount - coins[j],那么数量为dp[amount-conis[j]]。

代码如下:

 

 1 class Solution {
 2     public int coinChange(int[] coins, int amount) {
 3         int[] dp = new int[amount + 1];  
 4         for (int i = 1; i <= amount; i++) dp[i] = 0x7fff_fffe;  
 5         for (int coin : coins)  
 6             for (int i = coin; i <= amount; i++)  
 7                 dp[i] = Math.min(dp[i], dp[i - coin] + 1);  
 8         return dp[amount] == 0x7fff_fffe ? -1 : dp[amount]; 
 9     }
10 }

 

 

END

posted @ 2018-04-27 11:53  sysu_kww  阅读(138)  评论(0编辑  收藏  举报