ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Leetcode 70 爬楼梯

2026/9/9 13:16:55 拓冰建站 浏览量
Leetcode 70 爬楼梯

题意理解

        假设你正在爬楼梯。需要 n 阶你才能到达楼顶。其中每次只能爬1阶或2阶。

        问:爬到楼顶有几种走法?

        如: n=1  爬一阶: 1

              n=2 爬两阶:  1+1   要么从第1阶再爬一阶,要么从第0阶,一次性爬两阶

              n=3 爬三界:  1+2  (1+1)+1   2+1

                                     要么从第2阶再爬一阶即可,要么在第1阶一次性爬两阶即可

                                     而爬到第1阶有一种方式,爬到第2阶有两种方式

                                     故爬到第三阶有1+2=3种方式

             则有递推公式:f[i]=f[i-1]+f[i-2]

解题思路

        采用动态规划的方式求解此题,按照五个步骤来分析。

        1. 确定dp[]数组和下标的含义,其中dp[i]表示爬到第i阶有几种方式。

        2. 确定递归函数:dp[i]=dp[i-1]+dp[i-2]

        3. 初始化:dp[1]=1 dp[2]=2

        4. 确定遍历方式:总是前面的结果影响后续取值,所以遍历顺序总是从前到后

        5.打印dp数组,用于debug

1.动态规划解题

 public int climbStairs(int n) {//定义存储int[] dp=new int[n+1];//初始化dp[1]=1;if(n>1) dp[2]=2;//遍历for(int i=3;i<=n;i++){dp[i]=dp[i-1]+dp[i-2];}return dp[n];}

2.存储压缩

使用数值取代数组存储结果。空间复杂度O(n+1)——>O(3)

public int climbStairs(int n) {//定义存储int sum=0,dp1=1,dp2=2;if(n==1) return dp1;if(n==2) return dp2;//初始化sum=dp1+dp2;//遍历for(int i=3;i<=n;i++){sum=dp1+dp2;dp1=dp2;dp2=sum;}return sum;}

3.分析

时间复杂度:O(n) 用于遍历n个状态值

空间复杂度

        数组存储 O(n)

        数值存储 O(1)

n表示输入的数值的大小。