70. Climbing Stairs
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.
分析:每次都可以爬一步或者两步,问有多少种方法爬到楼顶。设 f (n) 表示爬 n 阶楼梯的不同方法数,为了爬到第 n 阶楼梯,有两个选择:(1)从第 n - 1 阶前进 1 步;
(2)从第 n - 2 阶前进 2 步;
因此,有 f (n) = f (n - 1) + f (n - 2)。这是一个斐波那契数列。
代码一:TIme limit Exceeded
class Solution {
public:
int climbStairs(int n) {
return Fibonacci(n);
}
private:
int Fibonacci(int n){
if(n <= 2){
return n;
}
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
};
代码二:AC
class Solution {
public:
int climbStairs(int n) {
if(n<=2)
return n;
int *r = new int[n];
r[0] = 1;
r[1] = 2;
for(int i = 2 ; i<n;i++){
r[i]= r[i-1]+r[i-2];
}
int res = r[n-1];
delete[]r;
return res;
}
};