假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
超出时间限制方法;
class Solution {
public:
int climbStairs(int n) {
if(n==1)
{
return 1;
}
if(n==2)
{
return 2;
}
return climbStairs(n-1)+climbStairs(n-2);
}
};
一开始用vector存放数组,结果还是时间长,换成f1,f2了:
class Solution {
public:
int climbStairs(int n) {
int i,f1,f2,sum;
if(n==1)
{
return 1;
}
if(n==2)
{
return 2;
}
f1=1;
f2=2;
for(i=3;i<=n;i++)
{
sum=f1+f2;
f1=f2;
f2=sum;
}
return f2;
}
};
时间还有优化的空间,时间上只超过了39.43%用户