LeetCode:70. 爬楼梯

2022-02-02  本文已影响0人  alex很累

问题链接

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];
    }
}

执行结果

上一篇下一篇

猜你喜欢

热点阅读