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?
class Solution {
public:
int climbStairs(int n) {
int a,b,c;
a = 1;
b = 2;
if(n == 1){
return a;
}
if(n == 2){
return b;
}
for(int i =2;i < n;i++){
c = a + b;
a = b;
b = c;
}
return c;
}
};
解题思路:题目是一个动态规划的问题,因为每次只能走1或2步,所以到达最后一步之前有两种选择。设d(n)是到达第n级阶梯的解,则d(n) = d(n-1) + 1 + d(n-2) + 2,所以可以通过递归推出d(n),跟斐波那契数列很像,同样,如果n比较大,递归效率会很低,所以采用动态规划方法,将d(n-1)和d(n-2)记录下来,推出d(n).