解题思路:
爬楼梯问题就是斐波那契数列数列问题。
这里利用一个dp数组储存每次递归的值,如果之后有用到直接返回。
这个方法是在动态规划中很典型的,后期中等或困难的题目都是利用dp数组再优化。
class Solution {
int dp[];
public int climbStairs(int n) {
dp = new int[n + 1];
return dp(n);
}
int dp(int n ){
if(n <= 2){
return n;
}
//如果存在对应的值,直接返回
if(dp[n] > 0){
return dp[n];
}
// 爬到第 n 级台阶的方法个数等于爬到 n - 1 的方法个数和爬到 n - 2 的方法个数之和。
dp[n] = dp(n - 1) + dp(n - 2);
return dp[n];
}
}