【LeetCode】70 爬樓梯
阿新 • • 發佈:2018-11-29
假設你正在爬樓梯。需要 n 階你才能到達樓頂。
每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?
注意:給定 n 是一個正整數。
示例 1:
輸入: 2
輸出: 2
解釋: 有兩種方法可以爬到樓頂。
1 階 + 1 階
2 階
示例 2:
輸入: 3
輸出: 3
解釋: 有三種方法可以爬到樓頂。
1 階 + 1 階 + 1 階
1 階 + 2 階
2 階 + 1 階
解題思路:
1 拿到這道題第一反應是:這怎麼做?遍歷不過來啊…… 於是…就開始像做高中數學題一樣拿出大殺器:歸納法,嘗試了幾個資料之後,發現就是一個斐波那契數列。
2 做是做出來了,可是為什麼呢… 斐波那契數列是S(n) = S(n-1) + S(n - 2),也就是說n級臺階的走法是n-1級臺階和n-2級臺階走法之和!
3 事情變得清晰了起來,關鍵在於最後一步,如果我最後一步走的是一階,那麼我之前有S(n-1)種走法;如果我最後一步走的是兩階,那麼我之前有S(n-2)種走法。後查閱資料才知這是一道簡單的動態規劃問題。
程式碼:
class Solution { public int climbStairs(int n) { if (n <= 0) return 1; int[] fibo = new int[n]; int sum = 0; for(int i = 0;i < n; i++){ if (i == 0) fibo[i] = 1; else if (i == 1) fibo[i] = 2; else fibo[i] = fibo[i-1] + fibo[i-2]; } return fibo[n-1]; } }