(動態規劃)322 零錢兌換

2021-10-06 02:15:05 字數 965 閱讀 5921

還幾天沒有更新部落格,是不是想我了(自戀狂哈哈)。這幾天主要是老闆讓研究pointnet,因為環境配置總是出些問題,(菜雞一枚)所以耽擱了些時間。搞好了環境,然後看了幾天pointnet**,於是趕快來刷刷題。今天看的仍然是一道動態規劃的題目。

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

示例 1:

輸入: coins = [1, 2, 5], amount = 11

輸出: 3

解釋: 11 = 5 + 5 + 1

示例 2:

輸入: coins = [2], amount = 3

輸出: -1

個人通過刷題,發現了乙個小問題,這種求最多最小的一般都可以用動態規劃來解題,當然這是特殊情況,具體的還要根據動態規劃的定義去判定。這題根據定義來看,確實是動態規劃的題。我為了圖省事,我通常判別動態規劃題一般看問題,要求最少最多**不離十就是動態規劃題,然後看是否有最優子結構,如果有,我就把它當做動態規劃來解。

對於動態規劃問題,我的解法是把問題設為dp[n],然後去找迭代方程。

此題dp[n]就是金額為n時最少的硬幣個數,

n<0,dp[n]=-1;

n=0,dp[n]=0;

n>0,dp[n]=min(dp[n],dp[n-c]+1)

class solution 

}if(dp[amount]==int_max/2)//總金額為amount的dp仍為初始化值,說明沒有任何一種硬幣組合組成總金額

return dp[amount];

}};

1.為什麼使用int_max/2,而不是int_max

因為如果dp[i-c]為int_max時,加上1就會越界

2.動態規劃有個特點就是求最小時,初始化的值一般為不越界的情況盡可能大;求最大時,初始化一般為0;

322 零錢兌換(動態規劃)

322.零錢兌換 author wsq date 2020 10 13 給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 1。你可以認為每種硬幣的數量是無限的。示例 1 輸入 coins 1,...

LeetCode動態規劃 322零錢兌換

給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 1。示例 1 輸入 coins 1,2,5 amount 11 輸出 3 解釋 11 5 5 1 示例 2 輸入 coins 2 amount...

322 零錢兌換

class solution 不是大的取的越多越好,大的取的很多,最後不能剛好取到,比如22,陣列是10,6,你直接取兩個10肯定不行第乙個數有取1個,取0個或者取多個好幾種取法。比如18,你有10和6,那麼10乙個都不能取 所以要考慮的只是當前這一位可以取幾個 for int i left coi...