DP之零錢兌換問題

2021-10-07 18:48:10 字數 936 閱讀 5173

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 上述方程簡化為一維陣列實現 可參考我的揹...