【leetcode】爬楼梯
0、题目
参见【leetcode】70
1、解法1
1)思路:使用递归
if(n==1) return 1;
if(n==2) return 2;
return f(n-1)+f(n-2)
2)代码:Java
class Solution {
public int climbStairs(int n) {
if(n==1) return 1;
if(n==2) return 2;
return climbStairs(n-1)+climbStairs(n-2);
}
}
3)问题:超时,中间存在大量的重复计算
2、解法2
1)思路
使用动态规划递归算法时需要计算多次重复值,不使用动态规划,直接递推顺序进行计算并存储计算值
2)代码【Java】
class Solution {
public int climbStairs(int n) {
if(n==1) return 1;
if(n==2) return 2;
//return climbStairs(n-1)+climbStairs(n-2);
int[]value = new int[n+1];
value[1] = 1;
value[2] = 2;
for(int i=3;i<=n;i++){
value[i]=value[i-1]+value[i-2];
}
return value[n];
}
}
3)无超时现象