Day32| 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

509. 斐波那契数

动态规划五部曲:

  1. 确定dp数组以及下标含义
  • 第i个数的斐波那契数列是dp[i]
  1. 确定递推公式
  • 状态转移方程 dp[i] = dp[i - 1] + dp[i - 2];
  1. dp数组如何初始化
  • dp[0] = 0; dp[1] = 1;
  1. 确定遍历顺序
  • dp[i]是依赖 dp[i - 1] 和 dp[i - 2]→遍历的顺序一定是从前到后遍历的
  1. 举例推导dp数组
cs 复制代码
public class Solution {
    public int Fib(int n) {
        if(n<2) return n;
        // 用长度为2的数组保存前两个结果,节省空间
        int[] dp=new int[2]{0,1};
        // 从 2 开始迭代直到 n
        for(int i=2;i<=n;i++){
            // 滚动数组:前一项变成现在的后一项
            int temp=dp[0]+dp[1];
            dp[0]=dp[1];
            dp[1]=temp;
        }
        // 返回第 n 项(最终保存在 dp[1] 中)
        return dp[1];
    }
}

70. 爬楼梯(写法与上题相同)

动态规划五部曲:

  1. 确定dp数组以及下标含义
  • 达到i阶有dp[i]种方法
  1. 确定递推公式
  • 状态转移方程 dp[i] = dp[i - 1] + dp[i - 2];
  1. dp数组如何初始化
  • dp[1] = 1; dp[2] = 2;
  1. 确定遍历顺序
  • dp[i]是依赖 dp[i - 1] 和 dp[i - 2]→遍历的顺序一定是从前到后遍历的
  1. 举例推导dp数组
cs 复制代码
public class Solution {
    public int ClimbStairs(int n) {
        if(n<=2) return n;
        int[] dp=new int[2]{1,2};
        for(int i=3;i<=n;i++){
            int temp=dp[0]+dp[1];
            dp[0]=dp[1];
            dp[1]=temp;
        }
        return dp[1];
    }
}

746. 使用最小花费爬楼梯

可以选择爬 1 或 2 个台阶,可以从下标 01 开始爬

动态规划五部曲:

  1. 确定dp数组以及下标含义
  • 到达第i台阶所花费的最少体力为dp[i]。
  1. 确定递推公式
  • 状态转移方程

  • dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]

  1. dp数组如何初始化
  • dp[0] = 0; / dp[1] = 0;
  1. 确定遍历顺序
  • dp[i]是依赖 dp[i - 1] 和 dp[i - 2]→从前到后遍历cost数组
  1. 举例推导dp数组
cs 复制代码
public class Solution {
    public int MinCostClimbingStairs(int[] cost) {
        int[] dp=new int[2]{0,0};
        for(int i=2;i<=cost.Length;i++){
            int temp=Math.Min((dp[1]+cost[i-1]),(dp[0]+cost[i-2]));
            dp[0]=dp[1];
            dp[1]=temp;
        }
        return dp[1];
    }
}
相关推荐
灰灰勇闯IT1 小时前
ops-reduce:ReduceMax 与 ReduceMean 的并行优化
算法
水木流年追梦1 小时前
大模型入门-Reward 奖励模型训练
开发语言·python·算法·leetcode·正则表达式
沙威玛_LHE1 小时前
P13376题解
算法
DFT计算杂谈1 小时前
KPROJ编译教程
java·前端·python·算法·conda
重生之我是Java开发战士2 小时前
【笔试强训】Week5:空调遥控, kotor和气球,走迷宫,主持人调度II,体操队形,二叉树的最大路径和,排序子序列,消减整数
java·算法·动态规划
吃好睡好便好3 小时前
用if…end…语句计算分段函数
开发语言·人工智能·学习·算法·matlab
灰灰勇闯IT3 小时前
ops-memory:CANN Runtime 的 Tensor 内存管理
算法
叶子Talk3 小时前
OpenAI破解80年数学猜想,AI首次做出原创证明
人工智能·数学·算法·机器学习·ai·openai·ai推理
MhZhou04123 小时前
1.11M参数小模型实现脑瘤分割 CVPR 2026 Findings 开源
算法·计算机视觉·3d·空间计算
有为少年4 小时前
Welford算法 | 从单一到批次
大数据·人工智能·深度学习·神经网络·算法·机器学习