爬樓梯 從簡單的動態規劃入手

2021-10-08 11:26:02 字數 1097 閱讀 4503

leetcode 70 爬樓梯

題目概述

假設你正在爬樓梯。需要 n 階你才能到達樓頂。

每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?

注意:給定 n 是乙個正整數。

示例 1:

輸入: 2

輸出: 2

解釋: 有兩種方法可以爬到樓頂。

1. 1 階 + 1 階

2. 2 階

示例 2:

輸入: 3

輸出: 3

解釋: 有三種方法可以爬到樓頂。

4. 1 階 + 1 階 + 1 階

5. 1 階 + 2 階

6. 2 階 + 1 階

題目分析

這是一道基礎的動態規劃的題目,首先回顧一下動態規劃問題的解題思路

我們先根據題目條件對問題進行拆解,題目說我們可以一次上一層樓梯,也可以一次兩層,那麼我們去第2層的話可以是一層一層上去,也可以直接到第二層,換句話說就是到達第二層的方法要麼從第0層(地面)到達,要麼從第一層到達

0—>2

0—>1—>2

引申出來就是如果到達第n層,我們要麼通過第n-1層到達,要麼通過第n-2層到達(都是基於題目條件的上一層或兩層)

狀態定義

我們定義乙個儲存變數dp,記錄到達每層的步數

遞推公式

通過上面的公式我們可以很快推導出

dp[n] = dp[n-1] + dp[n-2]

因為涉及到n-2,所以我們n>=2

我們第0-2層其實可以很快推導出來,那麼我們在初始化的時候可以直接賦值,dp=[1,1,2],然後從第三層開始

**實現

/**

* @param n

* @return

*/var

climbstairs

=function

(n)return dp[n]

};

動態規劃 爬樓梯

假設你正在爬樓梯,需要n步你才能到達頂部。但每次你只能爬一步或者兩步,你能有多少種不同的方法爬到樓頂部?比如n 3,1 1 1 1 2 2 1 3,共有3種不同的方法 返回 3 解題思路 沒接觸過動態規劃的時候,我用排列組合做的,在我這篇部落格中 可以看一下。實際上,這個題目就是乙個斐波那契數列,這...

爬樓梯 動態規劃

假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。示例 1 輸入 2 輸出 2 解釋 有兩種方法可以爬到樓頂。1.1 階 1 階 2.2 階 示例 2 輸入 3 輸出 3 解釋 有三種方法可以爬到樓頂。1...

動態規劃 爬樓梯

假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。示例 1 輸入 2 輸出 2 解釋 有兩種方法可以爬到樓頂。1.1 階 1 階 2.2 階 示例 2 輸入 3 輸出 3 解釋 有三種方法可以爬到樓頂。1...