1、题目描述
2、分析
输入一个n,问爬上n层台阶,有多少种方法,一次可以爬一个或者两个。很明显这其实是一道斐波那契数列的变形,菲波那切数列在我们之前通常作为递归的理解,但是如果输入的数字比较大,递归很容易造成爆栈原因就是递归层次太多。所以在这里我们意识到这个问题是斐波那契之后,一定不要选择递归的做法。而是使用一个变量来保存中间变量,这样其实就是将这个问题,变成了动态规划的做法。之前总结的动态规划的知识。(https://blog.csdn.net/zl6481033/article/details/84585115)。
3、代码
class Solution {
public:
int climbStairs(int n) {
if(n==1) return 1;
if(n==2) return 2;//这一句可以不加
int first=1;
int second=2;
for(int i=3;i<=n;++i){
int newway=second+first;
first=second;
second=newway;
}
return second;
}
};
4、相关知识点
动态规划的简单使用。涉及到斐波那契的使用上面的代码应该就已经可以了,时间复杂度和空间复杂度要更小的话就需要更难一点的数学知识。