509
dp[i]就是由前两位推出来的,那么也不用dp数组
动态规划5步:
确立dp数组含义
递推公式
初始化dp
遍历顺序
打印
class Solution:
def fib(self, n: int) -> int:
if n==0:
return 0
dp=[0]*(n+1)
dp[0]=0
dp[1]=1
for i in range(2,n+1):
dp[i]=dp[i-1]+dp[i-2]
return dp[n]
70.爬楼梯
第三层楼梯的状态可以由第二层楼梯 和 到第一层楼梯状态推导出来,那么就可以想到动态规划
class Solution:
def climbStairs(self, n: int) -> int:
if n<=1:
return n#n为1的情况可输出
dp=[0]*(n+1)
dp[1]=1
dp[2]=2
for i in range(3,n+1):
dp[i]=dp[i-1]+dp[i-2]
return dp[n]
746,使用最小花费爬楼梯
题目中说 “你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯” 也就是相当于 跳到 下标 0 或者 下标 1 是不花费体力的, 从 下标 0 下标1 开始跳就要花费体力。
class Solution:
def minCostClimbingStairs(self, cost: List[int]) -> int:
dp=[0]*(len(cost)+1)
#初始值和第一步不消耗体力
dp[0]=0
dp[1]=0
for i in range(2,len(cost)+1):
dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])
return dp[len(cost)]