代码随想录Day38 |509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

代码随想录Day38 |509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

  • 动态规划
  • 509.斐波那契数
  • 70.爬楼梯
  • 746.使用最小花费爬楼梯

动态规划

文档讲解:代码随想录
视频讲解:
状态

五步:
dp数组和下标的确定
递推公式
dp数组初始化
遍历顺序
打印dp数组

509.斐波那契数

文档讲解:代码随想录
视频讲解: 手把手带你入门动态规划 | leetcode:509.斐波那契数
状态

根据斐波那契数列特性来构建dp数组

  1. dp数组以及下标
    dp数组就是存储斐波那契数列的每个元素值,dp[i]表示的是第i个数的斐波那契数列值
  2. 递推公式
    dp[i]=dp[i-1]+dp[i-2]
  3. dp数组的初始化
    斐波那契数列的初始值 0和1j
    dp[0] = 0 dp[1] = 1
  4. 遍历顺序
    通过观测dp[i]是怎样得到的得出遍历顺序,对于斐波那契数列是从前往后。
  5. 打印dp数组
    用来判断我们的数列和递推公式的正确性
class Solution {
public:
    int fib(int n) {
        //当 n 不超过1 需要直接返回
        if(n <= 1) return n;
        //dp 数组
        vector dp(n+1);
        //dp数组的初始化
        dp[0] = 0;
        dp[1] = 1;
        //遍历
        for(int i=2;i

70.爬楼梯

文档讲解:代码随想录
视频讲解: 带你学透动态规划-爬楼梯|LeetCode:70.爬楼梯
状态

  1. dp数组
    dp[i] 表示爬i阶的方法数
  2. 递推公式
    第i阶可以表示为从i-1阶攀爬1阶,或者i-2阶攀爬2阶
    dp[i] = dp[i-1]+dp[i-2]
  3. 数组初始化
    dp[1] = 1 dp[2] = 2
  4. 遍历顺序
    从前往后
  5. 打印dp数组
    1 , 2, 3, 5
class Solution {
public:
    int climbStairs(int n) {
       if(n <= 1) return n;
       vector dp(n+1);
       //初始化
       dp[1] = 1;
       dp[2] = 2;
       for(int i = 3;i

746.使用最小花费爬楼梯

文档讲解:代码随想录
视频讲解: 动态规划开更了!| LeetCode:746. 使用最小花费爬楼梯
状态

本题需要注意的是,爬到楼梯顶部,即需要越过最后一个数,即到达不存在的下标为n的位置。

  1. dp数组
    dp[i] 表示 到达第i个台阶的最低花费
  2. 递推公式
dp[i] = min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
  1. 初始化
    dp[0] = 0;
    dp[1] = 0;
  2. 遍历顺序
    从前向后
  3. 打印dp数组
    dp[2] = min(dp[0]+cost[0],dp[1]
    +cost[1]) = 10
    //存在一个n = 3
    dp[3] = min(dp[1]+cost[1],dp[2]
    +cost[2]) = 15
class Solution {
public:
    int minCostClimbingStairs(vector& cost) {
        vector dp(cost.size()+1);
        dp[0] = 0;
        dp[1] = 0;
        for(int i = 2;i

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