LeetCode:70. 爬楼梯
2022-02-02 本文已影响0人
alex很累
问题链接
问题描述
假设你正在爬楼梯。需要 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 - 1
、n - 2
来推?n-1
再走1
步就是n
,n - 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];
}
}
执行结果