還幾天沒有更新部落格,是不是想我了(自戀狂哈哈)。這幾天主要是老闆讓研究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...