力扣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将之前出现的值存储一下,这个也就是递归优化-记忆法