代码随想录 70.爬楼梯

思路:爬到第一层有1种方法,爬到第二层有2种方法。那么第一层楼梯再跨两步就到第三层,第二层楼梯再跨一步就到第三层。所以到第三层楼梯的状态可以由第二层楼梯和第一层楼梯的状态推导出来,所以可以动态规划。

动规五部曲:

本题需要一个一维数组来记录不同楼层的状态。

1.确定dp数组及其下标的含义:

dpi:爬到第i层楼梯,有dpi种方法。

2.确定递推公式:

如何可以推出dpi呢?从dpi的定义来看,dpi可以有两个方向推出来。

(1)首先是dpi - 1,上i - 1层楼梯,有dpi - 1种方法,那么下一步上1个台阶就到dpi了。

(2)还有dpi - 2,上i - 2层楼梯,有dpi - 2种方法,那么下一步上2个台阶就到dpi了。

因此dpi就是dpi - 1和dpi - 2的和。

dpi = dpi - 1 + dpi - 2。

在推导dpi的时候,一定要时刻想着dpi的定义,否则容易跑偏。这体现出确定dp数组及其下标含义的重要性。

3.dp数组如何初始化:

dpi的含义是,爬到第i层楼梯,有dpi种方法。

那么i为0时,dpi应该为多少?在本题中,i为0时,dp0 = 0 或 dp0 = 1有争议。这是因为第0层台阶,既可以解释为爬到第0层也是一种方法,所以dp0 = 1;也可以解释为dp0时楼层是0,直接站在楼顶上了没有移动,所以dp0 = 1。在本题中,n是一个正整数,所以题目中没有n为0的情况。所以本题不需要讨论dp0的初始化。而本题中,dp1 = 1,dp2 = 2是没有争议的。所以本题不考虑dp0如何初始化,只初始化dp1 = 1,dp2 = 2,然后从i = 3开始递推,这样才符合dpi的定义。

4.确定遍历顺序:

从递推公式 dpi = dpi - 1 + dpi - 2可以得出,遍历顺序是从前向后的。

5.举例推导dp数组:

当n为5时,dp数组如下所示。

附代码:

java 复制代码
class Solution {
    public int climbStairs(int n) {
        if(n <= 2) return n;
        int[] dp = new int[n + 1];
        dp[1] = 1;
        dp[2] = 2;
        for(int i = 3;i <= n;i++){
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[n];
    }
}
java 复制代码
//用变量记录代替数组
class Solution {
    public int climbStairs(int n) {
        if(n <= 2) return n;
        int a = 1,b = 2,sum = 0;
        for(int i = 3;i <= n;i++){
            sum = a + b;
            a = b;
            b = sum;
        }
        return b;
    }
}
相关推荐
m0_5873830024 分钟前
24小时自助健身房软硬件解决方案实战指南:从架构设计到部署实施
java·spring·小程序·架构·需求分析
陆卿之44 分钟前
Java对接DeepSeek
java·开发语言·人工智能
庄园特聘拆椅狂魔44 分钟前
Java 后端转全栈的第一课:从前端项目搭建到技术选
java·开发语言·前端
烽火聊员1 小时前
Android屏幕卡顿traces.txt拉取查看
android·java·android studio
lzhdim1 小时前
C#不为人知的10个魔法特性:资深开发者也会震惊的底层奥秘
java·前端·javascript·算法·c#
ProcessOn官方账号2 小时前
java IO操作 你快速认识IO的相关基本知识
java·开发语言
计算机毕设定制辅导-无忧学长2 小时前
《基于Spring Boot的减脂轻食购物网站》
java·vue.js·spring boot·后端·减脂轻食购物网站
青山木2 小时前
Hot 100 --- 下一个排列
java·数据结构·算法·leetcode
Thinker QAQ2 小时前
并发编程(六):Atomic 的实现——从 Runtime 到 CPU
java·go·cas·并发编程·atomic·cpython
沐欣工作室_lvyiyi2 小时前
基于SpringBoot的博物馆预约系统设计与实现(论文+源码)
java·spring boot·后端·计算机毕业设计