leedcode518:完全揹包,零錢兌換,python逐行註解
題目:
程式碼:
class Solution:
def change(self, amount: int, coins: List[int]) -> int:
# 比如是隻有兩個硬幣面值,並且兩個硬幣的數量是無限的,當無限取硬幣時,轉移方程:pro[n] += proi[n-coin[i]] 為什麼是+=, 因為比如你使用面值為1時的組合方案在計算使用面值為2的方案時,應該是初始值;
# 時間複雜度:O(amount*coins_n)
# 空間複雜度:O(amount)
dp = [0] * (amount+1) # 初始的金額組合方案都應該是為0,且金額包含0和amount;所以應該定義amount+1
dp[0] = 1 # 作為參考值使得後續轉移方程正確, 比如當使用一分面值時,dp[1] = dp[1] + dp[1-1]; 明顯amount=1時應該有一種方案,又初始dp[1]=0,所以dp[0]=1
coins_n = len(coins)
for i in range(coins_n): # 因為硬幣是無限數量的所以針對硬幣迴圈,揹包容量由小變大
for j in range(coins[i], amount+1): # 因為當金額小於當前使用的面值時,不會使用
dp[j] += dp[j-coins[i]]
return dp[amount]
相關文章
- 從【零錢兌換】問題看01揹包和完全揹包問題
- 【LeetCode動態規劃#08】完全揹包問題實戰與分析(零錢兌換II)LeetCode動態規劃
- [LeetCode解題] -- 零錢兌換LeetCode
- 01揹包、完全揹包、多重揹包詳解
- 揹包DP——完全揹包
- 分組揹包、完全揹包
- Leetcode 322 零錢兌換LeetCode
- 【程式碼隨想錄】零錢兌換
- 力扣-322. 零錢兌換力扣
- 揹包問題(01揹包與完全揹包)
- 【LeetCode】322. 零錢兌換LeetCode
- leetcode322 零錢兌換LeetCode
- [Python手撕]零錢兌換(組合總數,需要去重)Python
- PIPIOJ 1079: PIPI的存錢罐 完全揹包
- dp-完全揹包
- 程式碼隨想錄day 38 || 322 零錢兌換,279 完全平方數,139 單詞拆分
- javascript演算法基礎之01揹包,完全揹包,多重揹包實現JavaScript演算法
- 【程式碼隨想錄】完全揹包
- 圖解二維完全揹包問題——降維打擊圖解
- 演算法-動態規劃-完全揹包演算法動態規劃
- 程式碼隨想錄演算法訓練營 | 322. 零錢兌換,279.完全平方數,139.單詞拆分演算法
- 揹包DP——混合揹包
- Codeup 貨幣系統(完全揹包問題)
- 揹包
- JavaScript 揹包問題詳解JavaScript
- 01揹包、有依賴的揹包
- 藍橋杯 演算法提高 拿糖果(完全揹包dp)演算法
- 窮舉法解決0/1揹包問題——pythonPython
- Java 註解完全解析Java
- 登鏈錢包(一款功能強大的以太坊錢包)完全開源
- 01 揹包
- 揹包DP
- 01揹包問題的解決
- 程式碼隨想錄演算法訓練營第四十四天 | 322.零錢兌換 279.完全平方數 139.單詞拆分演算法
- 詳解華為錢包
- 面試官:完全揹包都不會,是你自己走還是我送你?面試
- 揹包問題解題方法總結
- 揹包問題