↓快轉到主要內容
  1. LeetCode/

LeetCode 509: Fibonacci Number

·1 分鐘· ·
LeetCode Easy Math Dynamic-Programming Recursion Memoization
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2022-08-25

  • 提交紀錄:Accepted → Runtime Error → Accepted ×2

解題思路
#

F(n) = F(n - 1) + F(n - 2),每一項只依賴前兩項,所以不用開陣列,用兩個變數往前滾動(Linear DP 模板一)。直接遞迴不加記憶化是 O(2^n)。

我的嘗試
#

2022-11 重寫時寫成 for _ in n,整數不能迭代(TypeError),改成 range(n) 就 AC 了。

正確解法
#

class Solution:
    def fib(self, n: int) -> int:
        a, b = 0, 1
        for _ in range(n):
            a, b = b, a + b
        return a

複雜度
#

時間 O(n),空間 O(1)。

要特別避免的錯誤
#

  • 迴圈要寫 range(n),不能 for _ in n。
  • 沒有記憶化的遞迴是指數時間。

面試口說整理
#

每一項只依賴前兩項,我用兩個變數往前滾動 n 次,時間 O(n)、空間 O(1)。

相關文章

LeetCode 342: Power of Four
·1 分鐘
LeetCode Easy Math Bit-Manipulation Recursion
LeetCode 342 解題筆記:先確認是 2 的次方,再確認那個 1 在偶數位:n & 0x55555555 != 0,或 n % 3 == 1
LeetCode 231: Power of Two
·1 分鐘
LeetCode Easy Math Bit-Manipulation Recursion
LeetCode 231 解題筆記:2 的次方只有一個位元是 1,n & (n - 1) 會把最低的 1 消掉,結果是 0 就是;n 要是正數
LeetCode 326: Power of Three
·1 分鐘
LeetCode Easy Math Recursion
LeetCode 326 解題筆記:一直除以 3 直到除不盡,剩 1 就是;不用迴圈的話,3^19 能被 n 整除就是
LeetCode 504: Base 7
·1 分鐘
LeetCode Easy Math String
LeetCode 504 解題筆記:對絕對值不斷取 % 7 和 // 7,最後加上負號並反轉;0 要特別處理
LeetCode 415: Add Strings
·1 分鐘
LeetCode Easy Math String Simulation
LeetCode 415 解題筆記:兩個指標從尾巴往前逐位相加,記錄進位,迴圈結束後還有進位要補上
LeetCode 441: Arranging Coins
·1 分鐘
LeetCode Easy Math Binary-Search
LeetCode 441 解題筆記:找最大的 k 讓 k(k + 1) / 2 <= n;二分時往右更新要寫 l = mid + 1,不然會卡住