目录
一、题目描述
二、初次解答
1. 思路:通过计算n=1,2,3,4,5发现结果为1,2,3,5,8。这不就是斐波那契数列!因此,想到直接用递归方法求解,但是递归方法需要开辟递归栈空间,浪费了内存空间。接着,想到类似滑动窗口的方法:用一个i来指向数字下标,用s和e分别指向i-1和i-2的结果,那么当i不断往后移动时,s和e也不断往后移动。当i>n时结束循环返回e即可。以n=4为例,执行过程如下图所示:
2. 代码:
int climbStairs(int n) { if (n==1 || n==2) return n; int s=1,e=2,tmp; for(int i=3;i<=n;++i){ tmp=s; s=e; e+=tmp; } return e; }
3. 优点:实现简单,执行速度快且空间消耗少。
4. 缺点:暂无。
三、官方解法
官方的动态规划解法与上述解法一致,还有其他更加复杂的解法,此处不展开阐述。
四、C++写法
class Solution {
public:
int climbStairs(int n) {
if (1 == n || 2 == n)
return n;
int i = 1, j = 2, ret = 0;
for (int k = 3; k <= n; ++k) {
ret = i + j;
i = j;
j = ret;
}
return ret;
}
};
五、总结
对于未知的迭代问题,可以枚举几个例子寻找规律。遇到斐波那契数列,可以使用滑动窗口方法来求解。