题目描述:
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例 1:
输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。
- 1 阶 + 1 阶
- 2 阶
示例 2:
输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。
- 1 阶 + 1 阶 + 1 阶
- 1 阶 + 2 阶
- 2 阶 + 1 阶
解题思路:
首先,我们先考虑各阶之间的数量关系:
当1阶时,需要一次,直接从底部到顶
当2阶时,有两种方法:
1.考虑从0阶直接跨入2阶
2.从1阶跨入2阶
由此可见,跨上2阶的方式,是直接从0 ~ 2,或从1 ~ 2;
所以三阶时,我们也可以从一阶前跨上,或从两阶前跨上
那么只要知道到一阶前的方案和到两阶前的方案,并将其方案数相加即可
即可得公式:a[n] = a[n-1] + a[n-2]
代码:
class Solution:
def climbStairs(self, n: int) -> int:
a=[0,1,2,3]
if n < 4:
return a[n]
for i in range(4,n+1):
a.append(a[i-1] + a[i-2])
return a[n]