【力扣每日一题】——爬楼梯

简介: 动态规划入门算法题——爬楼梯

一、题目描述

原题链接
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

示例 1:

输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。

  1. 1 阶 + 1 阶
  2. 2 阶

二、题目分析

如果用递归进行求解的话,在进行递归运算时存在大量的重复计算,我们假设递归树的深度为n,则结点数为2^n 因此时间复杂度为O( n^2)。如果n的值稍微大一些我们的程序就会运行超时。因此我们用动态规划来优化代码。
求解
首先我们先确定DP的状态和转移方程

  • 状态变量: dp[n]表示爬n阶台阶的所有可能情况的总和
  • 状态转移方程: dp(n) = dp(n-1) +dp(n-2)
  • 初始条件: dp(0)=0
  • 边界条件: 因为n是正整数,故不需要考虑n<0的情况,等于n即终止状态转移方程

我们每次进行计算后就保存计算结果,这样保证每次计算都只是计算一次,继而解决重复计算的问题。

三、代码实现

class Solution {
    public int climbStairs(int n) {
        //特判,防止n=1时dp[2]下标越界
         if (n==1) {
            return 1;        
        }
        //定义数组用来存储每次计算的结果
    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];
    }
}
相关文章
|
4天前
|
算法 Java
LeetCode第70题爬楼梯
这篇文章是关于LeetCode第70题"爬楼梯"的解题分享。作者首先分析了题目,指出这是一个简单的问题,并且可以通过观察发现爬楼梯的规律:到达第n层楼梯的走法数等于到达第n-1层和第n-2层楼梯的走法数之和。接着,作者提供了一个Java语言的代码实现,使用了迭代的方式来计算爬楼梯的走法数。最后,作者总结了动态规划思想在解决这类问题时的应用,强调了通过观察问题找出规律的重要性。
LeetCode第70题爬楼梯
|
2月前
力扣每日一题 6/11 暴力搜索
力扣每日一题 6/11 暴力搜索
12 0
|
3月前
【力扣】70. 爬楼梯
【力扣】70. 爬楼梯
|
3月前
leetcode-70:爬楼梯
leetcode-70:爬楼梯
31 0
|
11月前
leetcode:70. 爬楼梯
此题运用递归思想。当只有1个台阶,那么只有1种方法爬到楼顶——跨一个台阶;当有2个台阶时,有2种方法爬到楼顶——跨一个台阶跨两次或直接跨两个台阶。当有3个台阶或更多台阶时,则可以选择先跨一个台阶还是先跨两个台阶,剩下的台阶再进行选择是先跨一个台阶还是先跨两个台阶……从而实现递归
30 0
leetcode 315周赛 解题报告
leetcode 315周赛 解题报告
51 0
|
机器学习/深度学习 Java Go
每日一题:Leetcode59. 螺旋矩阵 II
每日一题:Leetcode59. 螺旋矩阵 II
每日一题:Leetcode54. 螺旋矩阵
每日一题:Leetcode54. 螺旋矩阵