1. 程式人生 > 實用技巧 >劍指offer JZ-8

劍指offer JZ-8

題目描述

一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。 示例1

輸入

複製
1

返回值

複製
1
示例2

輸入

複製
4

返回值

複製
5

思路

動態規劃入門問題,定義dp[k]為到達第k階臺階的方案數,

由於上樓的方案有兩種,所以k臺階可由第k-1臺階和k-2臺階直接到達

故,dp[k] = dp[k-1] + dp[k-2]

class Solution {
public:
    int jumpFloor(int number) {
        vector<int
> dp; if(number == 1) return 1; if(number == 2) return 2; dp.push_back(0); dp.push_back(1); dp.push_back(2); for(int i=3;i<=number;i++) { int now = dp[i-1] + dp[i-2]; dp.push_back(now); } return dp[number]; } };
View Code

我們發現,狀態k只依賴於狀態k-1和狀態k-2,所以空間上可以優化

class Solution {
public:
    int jumpFloor(int number) {
        int pre_1 = 2;
        int pre_2 = 1;
        int now = 0;
        if(number == 1) return 1;
        if(number == 2) return 2;
        for(int i=3;i<=number;i++)
        {
            now 
= pre_1 + pre_2; pre_2 = pre_1; pre_1 = now; } return now; } };
View Code