美文网首页
LeetCode:70. 爬楼梯

LeetCode:70. 爬楼梯

作者: alex很累 | 来源:发表于2022-02-02 14:07 被阅读0次

    问题链接

    70. 爬楼梯

    问题描述

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

    示例

    示例1
    输入:n = 2
    输出:2
    解释:有两种方法可以爬到楼顶。
    1. 1 阶 + 1 阶
    2. 2 阶
    
    示例2
    输入:n = 3
    输出:3
    解释:有三种方法可以爬到楼顶。
    1. 1 阶 + 1 阶 + 1 阶
    2. 1 阶 + 2 阶
    3. 2 阶 + 1 阶
    

    解题思路

    这道题遇到的时候比较懵逼,好像就算暴力解题都不知道怎么开始。
    我们先分析题目:
    如果 n = 1,只有1种走法:1
    如果 n = 2, 有两种走法:2,1+1
    如果 n = 3, 我们可以怎么走?因为最后一次爬楼梯肯定是1或2,那我们是不是可以根据 n - 1n - 2来推?n-1再走1步就是nn - 2 再走2步就是n,把二者加起来就是所有的方法。
    由此可以大胆推出:f(n) = f(n-1)+f(n-2)
    最后这道题就变成了斐波那契数列......
    之前做过斐波那契数列的求解方法,在这里不做赘述。

    斐波纳契数列

    代码示例(JAVA)

    class Solution {
        public int climbStairs(int n) {
            int[] nums = {1, 2};
            for (int i = 2; i < n; i++) {
                nums[i % 2] = nums[0] + nums[1];
            }
    
            return nums[(n + 1) % 2];
        }
    }
    

    执行结果

    相关文章

      网友评论

          本文标题:LeetCode:70. 爬楼梯

          本文链接:https://www.haomeiwen.com/subject/dfhrkrtx.html