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?
分析可得 S(n) = S(n - 1) + S(n - 2)
则实现:
class Solution {
public:
int climbStairs(int n) {
if (n == 0)
return 0;
if(n == 1)
return 1;
if (n == 2)
return 2;
vector <int> Ncount;
Ncount.push_back(0);
Ncount.push_back(1);
Ncount.push_back(2);
for (int i = 3; i <= n; i++)
Ncount.push_back(Ncount[i - 1] + Ncount[i - 2]);
return Ncount[n];
}
};
递归方法如下,不过该方法没有保存之前的值,因此运行时,leetcode平台输出Time Limit Exceeded
class Solution {
public:
int climbStairs(int n) {
vector <int> Ncount;
if (n == 0)
return 0;
if(n == 1)
return 1;
if (n == 2)
return 2;
return climbStairs(n - 1) + climbStairs(n - 2);
}
};