继续刷LeetCode,第70题,求一次只能爬一阶或者两阶台阶的时候,总共有多少种情况可以到达第N阶台阶。
分析:
这个是很经典的一个题目,可以有两种方法来解决,一种是通过递归调用,结果等于前两次结果的和;第二种是通过循环的方式,第一阶与第二阶给定,第三阶开始由前两次的结果求和,直到第N阶。采用的方法可以是通过两个临时变量存储前两次的结果;或者通过容器的方式,将每次的结果保存,再到达目标的时候提取出前两次的值,再求和。
问题:
1、递归调用的时候出现时间超时的问题;
2、容器的使用;
3、动态规划的解决办法。
附上代码1:
class Solution {
public:
int climbStairs(int n) {
if(n==1)
return 1;
if(n==2)
return 2;
int s=2;
int tmp2,tmp1=1;
for(int i=3;i<=n;i++)
{
tmp2=s;
s=s+tmp1;
tmp1=tmp2;
}
return s;
}
};
代码2:
class Solution {
public:
int climbStairs(int n) {
vector<int> m(n,0);
if(n==1)
return 1;
m[0]=1;
m[1]=2;
for(int i=2;i<n;i++)
{
m[i]=m[i-1]+m[i-2];
}
return m[n-1];
}
};