零錢兌換問題
def coinChange(coins, amount): # 給你的零錢面額(不限數量) 要湊的總面額
# 異常判斷特殊情況(完全不可能有解的情況!)
if amount == 0:
return 0
if len(coins) == 0:
return -1
if len(coins) ==1 and coins[0] > amount:
return -1
# 建立存儲空間並初始化, 有的位置可能得不到
mem = [-1 for i in range(amount + 1)]
mem[0] = 0
for i in range(1, amount + 1):
cur_min = amount + 1
for 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 + 1 if cur_min < amount + 1 else amount + 1
# 找不到這一方案!
if mem[-1] == amount + 1:
return -1
else:
return mem[-1]