前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >LeetCode | 爬楼梯

LeetCode | 爬楼梯

作者头像
yiyun
发布2023-03-09 19:57:32
发布2023-03-09 19:57:32
26100
代码可运行
举报
文章被收录于专栏:yiyun 的专栏yiyun 的专栏
运行总次数:0
代码可运行

题目

70. 爬楼梯 - 力扣(LeetCode)

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

示例 1:

代码语言:javascript
代码运行次数:0
复制
输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶

示例 2:

代码语言:javascript
代码运行次数:0
复制
输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶

提示: 1 <= n <= 45

题解 其实就是 动态规划

将 本问题 分解为 多个 子问题, 爬上 第 n 阶楼梯的方法数量 等于以下 两 部分之和

  1. 爬上 n-1 阶楼梯的方法数量, 因为再爬1阶就能到第 n 阶
  2. 爬上 n-2 阶楼梯的方法数量, 因为再爬2阶就能到第 n 阶 于是可得 dpn = dpn−1 + dpn−2 初始化

dp0 = 1

dp1 = 1

时间复杂度:

O(n)

代码语言:javascript
代码运行次数:0
复制
public class Solution {
    #region 方法2: 循环
    public int ClimbStairs(int n)
    {
        if (n <= 1)
        {
            return 1;
        }
        // 注意: 长度: n + 1
        int[] arr = new int[n + 1];
        arr[0] = 1;
        arr[1] = 1;
        for (int i = 2; i < arr.Length; i++)
        {
            // arr[2] = arr[1] + arr[0]
            // arr[3] = arr[2] + arr[1]
            // arr[4] = arr[3] + arr[2]
            // ...
            // 在循环内最后一次: 再i++, 就会达到 Length, 从而不满足循环条件而退出
            // arr[n] = arr[n - 1] + arr[n -2]
            arr[i] = arr[i - 1] + arr[i - 2];
        }
        return arr[n];
    }
    #endregion
}

代码语言:javascript
代码运行次数:0
复制
public class Solution {
    #region 方法3: 循环 压缩优化
    /// <summary>
    /// dp[i] 只与 dp[i - 1] 和 dp[i - 2] 有关,没有必要存储所有计算过的 dp 项。用两个临时变量去存这两个状态就好
    /// </summary>
    /// <param name="n"></param>
    /// <returns></returns>
    public int ClimbStairs(int n)
    {
        int prev = 1, cur = 1;
        int temp;
        for (int i = 2; i < n + 1; i++)
        {
            temp = cur; // 暂存上一次的 cur
            cur = prev + cur; // 当前的 cur = 上上次cur + 上一次cur
            prev = temp; // prev 更新为 上一次 cur
        }

        return cur;
    }
    #endregion
}

Q&A 补充 参考 感谢帮助!

画解算法:70. 爬楼梯 - 爬楼梯 - 力扣(LeetCode)

本文作者: yiyun

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档