假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
思路:
| 台阶n | 1 | 2 | 3 | 4 | n-2 | n-1 | n |
|---|---|---|---|---|---|---|---|
| 方法 | 1 | 2 | 3 | 5 | f(n-2) | f(n-1) | f(n) |
要到达n阶台阶,必须从n-2阶跨两步,或者n-1阶跨一步
所以,n阶的方法f(n)可以为f(n-2)+f(n-1)
- 暴力方法(此方法会造成内存溢出)
function climbStairs($n) {
if ($n<3) return $n;
return climbStairs($n-2)+climbStairs($n-1);
}
- 斐波那契函数(其实就是个f(n)=f(n-1)+f(n-2))
function climbStairs($n) {
$arr[1] = 1;
$arr[2] = 2;
for ($i=3;$i<=$n;$i++) {
$arr[$i] = $arr[$i-1]+$arr[$i-2];
}
return $arr[$n];
}
本文探讨了经典的爬楼梯问题,即如何计算到达楼顶的不同方法数量。通过分析,我们发现该问题与斐波那契数列紧密相关,并提供了两种解决方案:一种是递归的暴力方法,另一种是利用斐波那契数列的特性进行优化,避免了重复计算。
&spm=1001.2101.3001.5002&articleId=105141630&d=1&t=3&u=92ec4d9f24c04d82a39287cc5891eb8d)
2482

被折叠的 条评论
为什么被折叠?



