#46707: python一行解


chenwei980503@gmail.com (陳維(Z))

學校 : 新北市立北大高級中學
編號 : 278351
來源 : [101.10.97.141]
最後登入時間 :
2025-09-29 19:33:05

  python一行解(18ms, 3.3MB)

  print((lambda m: [0, 1][m-1] if m<=2 else (lambda dp: ([(dp.append(dp[i-1]+dp[i-2])) for i in range(2, m)], dp[m-1])[1])([0, 1]))(int(input())))

  1. lambda m: ...
    定義一個匿名函數,參數是 m,用來處理計算

  2. [0, 1][m-1] if m<=2 else ...

    • 如果 m<=2,直接回傳 dp[m-1](即 [0, 1][0] 或 [0, 1][1]

    • 否則進入 else 部分

  3. (lambda dp: ...)([0, 1])

    • 定義另一個匿名函數,參數是 dp(初始值 [0, 1]

    • 使用 list comprehension [(dp.append(dp[i-1] + dp[i-2])) for i in range(2, m)] 來填充 dp 陣列

      • dp.append(dp[i-1] + dp[i-2]) 計算費氏數列並加入 dp

      • 由於 append 回傳 None,這個 list comprehension 會產生一個 [None, None, ..., None] 的列表,但我們只關心 dp 的變化,所以忽略它

    • (..., dp[m-1])[1] 是一個 tuple,我們取第二個元素 dp[m-1] 作為結果