題目描述:給定整數 numRows,產生帕斯卡三角形的前 numRows 列並回傳。帕斯卡三角形的規律是:每列的首尾元素為 1,中間的每個元素等於上一列中正上方兩個元素之和。
解題思路:逐列建構,利用前一列的資料計算當前列。
具體步驟:
triangle。i(從 0 到 numRows - 1):
i + 1 的列,首尾元素設為 1。j(從 1 到 i - 1),設 row[j] = triangle[i-1][j-1] + triangle[i-1][j]。triangle。triangle。這是一個簡單的動態規劃問題:每個元素的值由前一列兩個相鄰元素決定,狀態轉移明確。
時間複雜度:O(numRows²) — 第 i 列(0-indexed)有 i+1 個元素,總元素數為 1 + 2 + ... + numRows = numRows*(numRows+1)/2,故整體為 O(numRows²)。
空間複雜度:O(numRows²) — 輸出陣列本身儲存所有元素,若不計算輸出空間則額外空間為 O(1)(僅需儲存當前列)。
1. Initialize triangle as an empty list.
2. For i from 0 to numRows - 1:
a. Create row of size (i + 1) filled with 1s.
b. For j from 1 to i - 1:
- row[j] = triangle[i-1][j-1] + triangle[i-1][j]
c. Append row to triangle.
3. Return triangle.方法一:利用組合數公式直接計算
i 列(0-indexed)的第 j 個元素恰好是組合數 C(i, j)。可直接以公式 C(i, j) = C(i, j-1) * (i - j + 1) / j 逐一計算每個元素,無需參考上一列。方法二:滾動陣列(單列原地更新)