题目链接:https://leetcode.com/problems/climbing-stairs/#/description
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.
这是一道简单经典的动态规划题,由于每次只能跳一阶或两阶,所以第n个台阶只能从第n-1个台阶或第n-2个台阶上跳上去,假设f(n)表示跳到第n阶的方法,那么f(n) = f(n-2) + f(n-1)。所以,这道题的关键点就是记录前一阶和前两阶的方法个数。
代码如下:
class Solution {
public:
int climbStairs(int n) {
if(n < 3)
return n;
int a, b, dp;
a = 1;
b = 2;
dp = 0;
for(int i = 3; i <= n; ++i){
dp = a + b;
a = b;
b = dp;
}
return dp;
}
};