---
# System prepended metadata

title: Easy－70. Climbing Stairs
tags: [Java, Easy, LeetCode]

---

###### tags: `LeetCode`,`Java`,`Easy`
# Easy－70. Climbing Stairs
### **題目連結：** [**Climbing Stairs**](https://leetcode.com/problems/climbing-stairs/description/)

### **解題方向** 
* 這是一道比較經典的動態規劃問題。我們可以用 dp[i] 表示爬 i 階樓梯的方法數。那麼有 dp[i]=dp[i-1]+dp[i-2]，即爬到第 i 階樓梯的方法數等於爬到第 i-1 階樓梯的方法數加上爬到第 i-2 階樓梯的方法數。
* 為什麼是 dp[i-1]+dp[i-2] 呢？因為在爬到第 i 階樓梯的時候，我們有兩種方法：從第 i-1 階樓梯跨一步到第 i 階樓梯，或者從第 i-2 階樓梯跨兩步到第 i 階樓梯。而爬到第 i-1 階樓梯的方法數和爬到第 i-2 階樓梯的方法數，已經在前面求解過了。
* 但是，有一些有趣的數學特徵可以幫助我們更快地解決這個問題。我們注意到，如果我們不考慮“一步只能爬 1 或 2 級台階”的限制，那麼爬 n 級台階的方法數就是斐波那契數列的第 n+1 項，即 fib(n+1)。
* 斐波那契數列是一個非常經典的數學問題，定義為：第 0 項為 0，第 1 項為 1，從第 2 項開始，每一項等於前兩項的和。因此，斐波那契數列的前幾項是 0、1、1、2、3、5、8、13、21、34、……


### **完整程式碼**
```java=
class Solution {
    public int climbStairs(int n) {
        int[]dp=new int[n+1];
        dp[0]=1;
        dp[1]=1;
        for(int i=2;i<=n;i++){
            dp[i]=dp[i-1]+dp[i-2];
        }
        return dp[n];
    }
}
```