2019.1.18
题目描述:
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.
Example 1:
Input: 2 Output: 2 Explanation: There are two ways to climb to the top. 1. 1 step + 1 step 2. 2 steps
Example 2:
Input: 3 Output: 3 Explanation: There are three ways to climb to the top. 1. 1 step + 1 step + 1 step 2. 1 step + 2 steps 3. 2 steps + 1 step
典型的斐波那契数列问题。
解法一:
这道题如果用递归做,当n很大的时候,会有很多重复计算,就会超时,不能AC,这时候就要运用动态规划了,用空间换时间。
斐波那契数列的方程式:F(n)=F(n-1)+F(n-2),边界条件:F(0)=1,F(1)=2;
C++代码:
class Solution {
public:
int climbStairs(int n) {
vector<int> dp;
dp.insert(dp.begin(),1);
dp.insert(dp.begin()+1,2);
for(int i=2;i<n;i++){
dp.insert(dp.begin()+i,dp[i-1]+dp[i-2]);
}
return dp[n-1];
}
};
执行时间:0ms。。。。。