Python Lambda dp计算

时间:2018-11-29 22:33:46

标签: python dynamic-programming

我试图理解下面的代码片段,对于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]

1 个答案:

答案 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()方法将在此列表完成后执行,只需在列表中找到最小值即可。