【Leetcode解題】70. Climbing Stairs
題目
- 題目連結
- 目標函式 :
climbStairs(n)- Input :
n: int - Output :
int
- Input :
解題概念
- 題意 :
- 現在要爬樓梯,題目給定需要
n步抵達樓上 - 每次可以跨一階或跨兩階
- 需要回傳總共有多少種方式上樓
- 現在要爬樓梯,題目給定需要
我的寫法
- 想法 : 這題也是演算法很經典的一題,我這裡簡單解釋它的想法,詳細的解題方式可參考 LeetCode #70 Climbing Stairs 解題思路及翻譯
- 首先可從遞迴的概念下手,
climbStairs(n)總共可分為兩類 :- 走一階 +
climbStairs(n - 1) - 走二階 +
climbStairs(n - 2)
- 走一階 +
- 因此,可列出遞迴式 :
climbStairs(n)=climbStairs(n - 1)+climbStairs(n - 2) - 而此遞迴式就是經典的 費式數列,因此我就直接使用費式數列的解法來解這題
- 首先可從遞迴的概念下手,
- 程式碼 :
1
2
3
4
5
6
7
8
9
10
11
12if n == 0 :
return 0
elif n == 1:
return 1
else:
a,b,c = 0, 1, 1
for i in range(2, n+1):
a = b
b = c
c = a + b
return c - 成效 :
- Time Complexity : $\color{DB4D6D}{O(n)}$
- Runtime: 14 ms (faster than 73.29%)
- Memory Usage: 13.3 MB (more than 33.50%)
解答 or 其他優秀寫法
- 想法 : 也有完全 Recursion 的寫法,但隨著
n增加,更容易找至 Time Limitation Exceeded 的狀況發生
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Robin's Tech Blog!


