我试图理解下面的代码片段,对于i的每个值,传递给min()
的所有两个参数是什么?如果您能说明如何扩展dp[i]
计算,将不胜感激?
class Solution(object):
def coinChange(self, coins, amount):
MAX = float('inf')
dp = [0] + [MAX] * amount
print(dp)
for i in range(1, amount + 1):
dp[i] = min([dp[i - c] if i - c >= 0 else MAX for c in coins]) + 1
print(dp)
return [dp[amount], -1][dp[amount] == MAX]
答案 0 :(得分:0)
这里发生了很多事情。
min()
方法正在接收python列表作为参数。
此python列表是通过list comprehension创建的。它有助于从背面开始。列表理解为:“对于可迭代c
中的每个值coins
,如果布尔值dp[i - c]
为i - c >=0
,则将值True
附加到我的列表中。 ,请附加值MAX
。
换句话说,行[dp[i - c] if i - c >= 0 else MAX for c in coins]
等效于
def makelist(dp,i,MAX,coins):
ret = []
for c in coins:
if i - c >= 0:
ret.append(dp[i-c])
else:
ret.append(MAX)
return ret
min()
方法将在此列表完成后执行,只需在列表中找到最小值即可。