描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

数据范围:1 \leq n \leq 401n40
要求:时间复杂度:O(n)O(n) ,空间复杂度: O(1)O(1)

示例1

输入:
2
复制
返回值:
2
复制
说明:
青蛙要跳上两级台阶有两种跳法,分别是:先跳一级,再跳一级或者直接跳两级。因此答案为2       

示例2

输入:
7
复制
返回值:
21
复制
解题思路:
dp[i]表示跳i个台阶的跳法总和
那么怎么才能跳到第i个台阶呢?有两种方式
1)从i-1处跳1个台阶跳到i;
2)从i-2处跳2个台阶跳到i;
方法总数即为上面两种方法的和。
base case
dp[0]=0
dp[1]=1
dp[2]=2

class Solution {
public:
    int jumpFloor(int number) {
        vector<int>dp(number+1); //dp[i]表示跳i个台阶的跳法总和
        dp[0] = 0;
        dp[1] = 1;
        dp[2] = 2;
        for (int i = 3; i <= number; i++) {
            dp[i] = dp[i-1] + dp[i-2];
        }
        return dp[number];
    }
};