You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
Note: Given n will be a positive integer.
看到题目的第一眼就想到了用递归大法来解决该问题。
代码如下:
class Solution {
public:
int climbStairs(int n) {
if(n <= 0)
return 0;
if(n == 1)
return 1;
if(n == 2)
return 2;
return climbStairs(n-1)+climbStairs(n-2);
}
};
但是使用递归大法的结果就是超时,那么说明只能将递归转换为迭代,将递归式转换为相应的迭代即可。
代码如下:
class Solution {
public:
int climbStairs(int n) {
if(n <= 0)
return 0;
if(n == 1)
return 1;
if(n == 2)
return 2;
int onestep = 1;
int twostep = 2;
int count = 0;
for(int i=3;i<=n;i++)
{
count = onestep + twostep;
onestep = twostep;
twostep = count;
}
return count;
}
};