def
coinchange
(coins, amount)
:# 給你的零錢面額(不限數量) 要湊的總面額
# 異常判斷特殊情況(完全不可能有解的情況!)
if amount ==0:
return0if
len(coins)==0
:return-1
iflen
(coins)==1
and coins[0]
> amount:
return-1
# 建立儲存空間並初始化, 有的位置可能得不到
mem =[-
1for i in
range
(amount +1)
] mem[0]
=0for i in
range(1
, amount +1)
: cur_min = amount +
1for c in coins:
# 當錢幣面值 < 當前需要湊的金額時
if c <= i:
# 動態轉移方程(找減少c元需要的最少零錢個數量,c為存在的零錢面額)
cur_min = mem[i - c]
if mem[i - c]
< cur_min else cur_min
# 不斷更新為i元時,需要的最少零錢個數
mem[i]
= cur_min +
1if cur_min < amount +
1else amount +
1# 找不到這一方案!
if mem[-1
]== amount +1:
return-1
else
:return mem[-1
]
dp 零錢兌換詳解
dp解題四步驟 步驟四 空間優化 leetcode322零錢兌換 題目簡介 給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 1。你可以認為每種硬幣的數量是無限的。通過考慮特殊情況找出子問題 ...
零錢兌換問題
給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 1。示例 1 輸入 coins 1,2,5 amount 11 輸出 3 解釋 11 5 5 1 示例 2 輸入 coins 2 amount...
leetCode 零錢兌換問題
零錢兌換問題 已知各種金幣面值costs i 每種面值可無限使用 求兌換出指定金額target的最小錢幣數。此題有dfs等的解法,這裡只介紹完全揹包的解法 先上狀態轉移方程 f i v 表示處理前i種錢幣時,剛好兌換面值為v時的錢幣數,則 f i v min 上述方程簡化為一維陣列實現 可參考我的揹...