文章目录
- 力扣70 爬楼梯
- 示例
- 代码实现
- 总结收获
力扣70 爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
示例
代码实现
class Solution {Map <Integer,Integer> map=new HashMap();public int climbStairs(int n) {if(n==1)return 1;if(n==2)return 2;if(map.containsKey(n))return map.get(n);int sum= climbStairs(n-1)+climbStairs(n-2);map.put(n,sum);return sum;}
}//f(n)=f(n-1)+f(n-2) f(1)=1 f(2)=2
总结收获
这道题很显然属于斐波那契数列的一个变体,所以第一想法是使用递归去做。于是很容易得到公式f(n)=f(n-1)+f(n-2) f(1)=1 f(2)=2,是一个多路递归。但是如果单纯递归这道题会超时,所以还需要加上一个备忘录,通过map将之前出现的值存储一下,这个也就是递归优化-记忆法