博客
关于我
leetcode题解70-爬楼梯
阅读量:792 次
发布时间:2023-01-31

本文共 765 字,大约阅读时间需要 2 分钟。

要解决爬楼梯问题,我们需要计算有多少种不同的方法可以爬到顶部。每次只能爬1或2个台阶。这个问题可以通过动态规划来高效解决,避免了递归的重复计算和超时问题。

方法思想

我们知道,每一步的台阶数都可以分解为前一步加上1阶,或者前两步加上2阶。因此,f(n) = f(n-1) + f(n-2),其中f(n)表示爬n阶的方法总数。

通过动态规划,我们逐步计算每一步的方法数,避免重复计算:

  • 初始化:当有1阶台阶时,有1种方法;当有2阶台阶时,有2种方法。
  • 逐步计算:从3阶开始,到达第n阶。每次计算f(n) = f(n-1) + f(n-2)。
  • 保存结果:将每一步的方法数存储在数组中,最后返回n阶的方法数。
  • 代码实现

    public int climbStairs(int n) {    if (n == 0) return 0;    int[] ways = new int[n + 1];    ways[1] = 1;    if (n >= 2) {        ways[2] = 2;    }    for (int i = 3; i <= n; i++) {        ways[i] = ways[i - 1] + ways[i - 2];    }    return ways[n];}

    讨论

    这个方法使用动态规划的思想,维护一个数组ways,其中ways[i]表示爬i阶的方法总数。初始化时,设置基准情况(f(1)=1,f(2)=2),然后从f(3)开始逐步计算到f(n)。通过循环计算,每一步只依赖于前两步的结果,保证了算法的高效性。

    • 时间复杂度:O(n),线性时间,计算了每个台阶的方法数。
    • 空间复杂度:O(n),额外空间用于存储方法数数组。

    这种方法适合处理较大的n值,能够在合理时间内给出答案。

    转载地址:http://qegyk.baihongyu.com/

    你可能感兴趣的文章
    leaflet饼状图(leaflet篇.74)
    查看>>
    LeakCanary使用,案例静态Toast引起的内存泄漏
    查看>>
    Leapin' Lizards
    查看>>
    learn c++(vector and array)
    查看>>
    Learning both Weights and Connections for Efficient Neural Networks
    查看>>
    Learning English With Our Team
    查看>>
    Learning jQuery, 4th Edition 勘误表
    查看>>
    Learning XNA 4.0 第三章(结尾)
    查看>>
    Leedcode3- Max Points on a Line 共线点个数
    查看>>
    LeetCode OJ:Merge k Sorted Lists(归并k个链表)
    查看>>
    leetcode Plus One
    查看>>
    LeetCode shell 题解(全)
    查看>>
    LeetCode Text Justification
    查看>>
    leetcode Valid Parentheses
    查看>>
    Leetcode | Simplify Path
    查看>>
    LeetCode – Refresh – 4sum
    查看>>
    LeetCode – Refresh – Valid Number
    查看>>
    leetcode — edit-distance
    查看>>
    LeetCode 中级 - 有序链表转换二叉搜索树(109)
    查看>>
    leetCode 字符串反转
    查看>>