70. 爬楼梯 完全背包版本
class Solution:
def climbStairs(self, n: int) -> int:
# dp = [0] * (n+1)
# dp[0] = 1
# dp[1] = 1
# for i in range(2,n+1):
# dp[i] = dp[i-1] +dp[i-2]
# return dp[n]
dp = [0]*(n+1)
dp[0] =1
for j in range(n+1):
for i in [1,2]:
if j >=i:
dp[j] +=dp[j-i]
return dp[n]
class Solution:
def coinChange(self, coins: List[int], amount: int) -> int:
#dp[i]表示amount为i时的最小硬币个数
#递推公式 dp[i] = min(dp[i],dp[i-j]+1)
#初始化 dp[0] =0,其他值大一些
dp = [float(inf)] *(amount+1)
dp[0] = 0
for i in coins:
for j in range(i,amount+1):
dp[j] = min(dp[j],dp[j-i]+1)
if dp[amount]!=float(inf):
return dp[amount]
else:
return -1
class Solution:
def numSquares(self, n: int) -> int:
# target是n,coins是int(n**(0.5))
dp = [float(inf)]*(n+1)
dp[0] = 0
for i in range(1,int(n**(0.5))+1):
for j in range(i*i,n+1):
dp[j] = min(dp[j],dp[j-i**2]+1)
# print(dp)
return dp[n]