[322][中等][动态规划][背包][DFS] 零钱兑换
题目描述
输入: coins = [1, 2, 5], amount = 11
输出: 3
解释: 11 = 5 + 5 + 1输入: coins = [2], amount = 3
输出: -1解题思路
动态规划
DFS
最后更新于
输入: coins = [1, 2, 5], amount = 11
输出: 3
解释: 11 = 5 + 5 + 1输入: coins = [2], amount = 3
输出: -1最后更新于
class Solution:
def coinChange(self, coins: List[int], amount: int) -> int:
dp = [float('inf')] * (amount + 1)
dp[0] = 0
for coin in coins:
for i in range(coin, amount + 1):
dp[i] = min(dp[i], dp[i - coin] + 1)
return dp[-1] if dp[-1] != float('inf') else -1class Solution:
def coinChange(self, coins: List[int], amount: int) -> int:
dp = [float('inf')] * (amount + 1)
dp[0] = 0
for i in range(1, amount + 1):
for coin in coins:
dp[i] = min(dp[i], (dp[i - coin] if i - coin >= 0 else float('inf')) + 1)
return dp[-1] if dp[-1] != float('inf') else -1class Solution:
def coinChange(self, coins: List[int], amount: int) -> int:
@lru_cache(None)
def dfs(number):
if number == 0:
return 0
if number < 0:
return float('inf')
min_count = float('inf')
for coin in coins:
min_count = min(min_count, dfs(number - coin) + 1)
return min_count
ans = dfs(amount)
return ans if ans != float('inf') else -1