爬楼梯问题可以转换为斐波那契数列进行求解
题目:爬楼梯
能够想到的主要关系是:F(N) = F(N-1)+F(N-2)
1.递归
刚开始想到的是递归但是会超时;(放弃)超时原因计算太多重复的值
2.动态规划
然后就是因为重复进行计算导致的,选择使用动态规划进行计算;
f(1) = 1;
f(2) = 2;
f(3) = f(1) + f(2) = 3;
f(4) = f(3) + f(2) = 5;
最简单的就是 直接定义数组,求n
3.动态数组
利用动态数组 p q r
每次的循环都将 q->p r->q r=q+p 最终r就是所求值
class Solution {
public int climbStairs(int n) {
//动态数组
// int p = 0, q = 0, r = 1;
// for (int i = 1; i <= n; ++i) {
// p = q;
// q = r;
// r = p + q;
// }
// return r;
//动态规划
if(n == 1){
return 1;
}
int[] dp = new int[n+1];
dp[1] = 1;
dp[2] = 2;
for(int i = 3;i <= n;i++){
dp[i] = dp[i-1] + dp[i-2];
}
return dp[n];
}
}