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揹包、完全揹包、多重揹包詳解
- Leetcode 322 零錢兌換LeetCode
- 【程式碼隨想錄】零錢兌換
- 【LeetCode】322. 零錢兌換LeetCode
- PIPIOJ 1079: PIPI的存錢罐 完全揹包
- javascript演算法基礎之01揹包,完全揹包,多重揹包實現JavaScript演算法
- 【程式碼隨想錄】完全揹包
- 圖解二維完全揹包問題——降維打擊圖解
- Codeup 貨幣系統(完全揹包問題)
- 揹包
- JavaScript 揹包問題詳解JavaScript
- 藍橋杯 演算法提高 拿糖果(完全揹包dp)演算法
- 窮舉法解決0/1揹包問題——pythonPython
- Java 註解完全解析Java
- 登鏈錢包(一款功能強大的以太坊錢包)完全開源
- 01 揹包
- 揹包DP
- 01揹包問題的解決
- 面試官:完全揹包都不會,是你自己走還是我送你?面試
- 詳解華為錢包
- 揹包問題解題方法總結
- CHOJ 5202 自然數拆分Lunatic版 【完全揹包模型】模型
- 01揹包詳解第一版
- EOS開發完全解析(二):用cleos命令列建立、匯入、解鎖錢包命令列
- ACM 揹包問題ACM
- 多重揹包二進位制分解思想講解
- 鎖定、解鎖Qtum錢包QT
- [需求建議]禮包、新手卡、積分兌換外掛(外掛需求)
- [Offer收割]程式設計練習賽1 hihocoder 1270 建造基地 (完全揹包)程式設計
- 01 揹包的變形
- spring全家桶註解(不完全)Spring
- leetcode題解(0-1揹包問題)LeetCode
- 動態規劃解0-1揹包問題動態規劃
- 01揹包面試題系列(一)面試題
- 動態規劃-揹包類動態規劃