代码随想录算法训练营第四十五天| 70. 爬楼梯,322. 零钱兑换,279. 完全平方数
70. 爬楼梯
题目链接:爬楼梯
和昨天的题一样。
class Solution:
def climbStairs(self, n: int) -> int:
dp = [0] * (n+1)
dp[0] = 1
for j in range(n+1):
for i in range(1,3):
if j >= i:
dp[j] += dp[j-i]
return dp[-1]
322. 零钱兑换
题目链接:零钱兑换
- 不选择
coins[i]
,dp[j]
- 选择
coins[i]
,dp[j-coins[i]]+1
class Solution:
def coinChange(self, coins: List[int], amount: int) -> int:
# dp[i] = 凑成i元所需的最少的硬币个数
dp = [inf] * (amount+1)
dp[0] = 0
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[-1] == inf: return -1
return dp[-1]
279. 完全平方数
题目链接:完全平方数
class Solution:
def numSquares(self, n: int) -> int:
# dp[i] = 和为i的完全平方数的最少数量
dp = [inf]*(n+1)
m = int(sqrt(n))
dp[0] = 0
for i in range(m+1):
for j in range(i**2,n+1):
dp[j] = min(dp[j],dp[j-i**2]+1)
return dp[-1]