力扣算法刷题Day38|动态规划:斐波那契数 爬楼梯 使用最小花费爬楼梯

力扣题目:#509. 斐波那契数 

刷题时长:参考答案后5min

解题方法:动态规划

复杂度分析

  • 时间O(n)
  • 空间O(n)

问题总结

本题收获

  • 动规五部曲思路
    • 确定dp数组以及下标的含义:dp[i]的定义为,第i个数的斐波那契数值是dp[i]
    • 确定递推公式:状态转移方程 dp[i] = dp[i - 1] + dp[i - 2]
    • dp数组初始化:dp[0] = 0; dp[1] = 1;
    • 确定遍历顺序:递归公式中dp[i]是依赖 dp[i - 1] 和 dp[i - 2],那么遍历的顺序一定是从前到后遍历的
    • 举例推导dp数组:当N为10的时候,dp数组应该为数列 0 1 1 2 3 5 8 13 21 34 55

力扣题目:#70. 爬楼梯 

刷题时长:5min

解题方法:动规

复杂度分析

  • 时间O(n)
  • 空间O(n)

问题总结

  • dp数组初始化索引变化,for循环需随之变化

本题收获

  • 练习了空间O(1)的解法,无需维护dp数组,只要维护curr,pre1,pre2
  • 动规思路
    • 确定dp数组以及下标的含义:爬到第i层楼梯,有dp[i]种方法
    • 确定递推公式:dp[i] = dp[i - 1] + dp[i - 2] 
    • dp数组初始化:dp[1] = 1,dp[2] = 2,然后从i = 3开始递推
    • 确定遍历顺序:从前向后
    • 举例推导dp数组:同斐波那契数列

力扣题目: #746. 使用最小花费爬楼梯 

刷题时长:参考题解后5min

解题方法:动规

复杂度分析

  • 时间O(n)
  • 空间O(n)

问题总结

  • 递推公式只基于了cost,没用到dp之前的状态
  • 注意顶楼的定位不是cost数组的末位,而是cost数组末位的后一位
  •  到达第 0个台阶是不花费的,但从第0个台阶往上跳的话,需要花费 cost[0]

本题收获

  • 确定dp数组以及下标的含义:到达第i台阶所花费的最少体力为dp[i]
  • 确定递推公式:dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])
  • dp数组初始化:dp[0] = 0,dp[1] = 0. 到达第0个台阶是不花费的,但从第0个台阶往上跳的话,需要花费cost[0]
  • 确定遍历顺序:从前向后
  • 举例推导dp数组:测试案例2举例如下

力扣算法刷题Day38|动态规划:斐波那契数 爬楼梯 使用最小花费爬楼梯_第1张图片

你可能感兴趣的:(算法)