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())))
lambda m: ...
定義一個匿名函數,參數是 m
,用來處理計算
[0, 1][m-1] if m<=2 else ...
如果 m<=2
,直接回傳 dp[m-1]
(即 [0, 1][0]
或 [0, 1][1]
)
否則進入 else
部分
(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]
作為結果