class Solution:
def coinChange(self, coins: List[int], amount: int) -> int:
# dp 装满背包 最少用多少物品
# 装满j的背包 最少的物品是j-1, j-2, j-3到0的物品最少的那个 + 1
dp = [0] + [float('inf')]* (amount)
for i in range(len(coins)):
for j in range(coins[i], amount + 1):
dp[j] = min(dp[j],dp[j - coins[i]] + 1)
if dp[amount] == float('inf'):
return -1
return dp[amount]
找最少需要用多少物品,装满j的背包 最少的物品是j-1, j-2, j-3到0的物品最少的那个 + 1
和上一题类似,只不过物品变成了完全平方数
class Solution:
def numSquares(self, n: int) -> int:
# dp 装满n的最少的物品数量,物品为完全平方数
dp = [0] + [float('inf')] * n
for i in range(0,int(n ** 0.5) + 1):
for j in range(i ** 2, n + 1):
dp[j] = min(dp[j], dp[j - i ** 2] + 1)
if dp[n] == float('inf'):
return 0
else:
return dp[n]