動態規划LeetCode322零錢兌換


題目描述:

給定不同面額的硬幣 coins 和一個總金額 amount。編寫一個函數來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 -1。

示例 1:

輸入: coins = [1, 2, 5], amount = 11
輸出: 3
解釋: 11 = 5 + 5 + 1
示例 2:

輸入: coins = [2], amount = 3
輸出: -1
說明:
你可以認為每種硬幣的數量是無限的。

 

思路:

利用貪心算法可以嗎?

算法思路:

 1 class Solution {
 2     public int coinChange(int[] coins, int amount) {
 3         
 4         int[] dp=new int[amount+1];
 5         for (int i=0; i<=amount; i++) {
 6             dp[i]=-1;
 7         }
 8         dp[0]=0;
 9         for (int i=1; i<=amount; i++) {
10             for (int j=0; j<coins.length; j++) {
11                 if (i-coins[j]>=0&&dp[i-coins[j]]!=-1) {
12                     if (dp[i]==-1||dp[i]>dp[i-coins[j]]+1) {
13                         dp[i]=dp[i-coins[j]]+1;
14                     }
15                 }
16             }
17             
18         }
19         return dp[amount];
20     }
21 }

這屬於一類背包問題,程序還是需要好好思考的!!

 

歡迎評論,共同進步!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM