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...