iT邦幫忙

2024 iThome 鐵人賽

DAY 27
0
佛心分享-刷題不只是刷題

圖解LeetCode(入門篇)系列 第 27

圖解LeetCode(入門篇): 119. Pascal's Triangle II

  • 分享至 

  • xImage
  •  

119. Pascal's Triangle II

题目描述:

給定一個非負整數 rowIndex,返回帕斯卡三角形的第 rowIndex 行。
Example :
https://ithelp.ithome.com.tw/upload/images/20240904/20168306HN0EpVe5aE.jpg

  • Input: rowIndex = 3
  • Output: [1,3,3,1]

解題思路:
這題和上一題 118. Pascal's Triangle 幾乎相同,不過這題只需要回傳某一行的結果,而不需要整個帕斯卡三角形。由於只回傳一行,因此我們可以優化解法,不必使用兩層 for 迴圈來構建整個三角形。

在帕斯卡三角形中,每個數字其實是組合數的一部分。具體來說,第 k 行的第 i 個元素可以用組合數公式表示:

C(k, i) = k! / (i! * (k - i)!)

這個公式代表從 k 個元素中選取 i 個元素的排列組合數。基於這個公式,我們可以不必重新計算所有階乘,而是通過遞推關係直接計算每個元素,遞推公式為:

C(k, i) = C(k, i - 1) * (k - i + 1) / i

這樣可以快速地根據前一個元素計算出下一個元素,並逐步生成一行的所有數字。

https://ithelp.ithome.com.tw/upload/images/20240905/20168306wPP88zKsaF.jpg

var getRow = function(rowIndex) {
    const row = [1];

    for (let i = 1; i <= rowIndex; i++) {
        row.push(row[i - 1] * (rowIndex - i + 1) / i);
    }

    return row;
};

時間複雜度:O(rowIndex)。每次計算下一個元素的時間複雜度為 O(1),因此總共計算rowIndex個元素。
空間複雜度:O(rowIndex),用於儲存結果陣列 row。

總結:
這道題目可以歸類為「帕斯卡三角形組合數公式」。透過數學推導,我們可以直接計算組合數來生成帕斯卡三角形的第 k 行,這樣有效減少了不必要的重複計算。相比於之前使用迭代法,這種方法在時間上更加高效,並且保持了最優的空間複雜度。特別是在需要計算較高行數時,這個解法的優勢會更為顯著。

在 LeetCode 的數學題目中,若要找到更優化的解法,通常需要運用數學公式來簡化運算過程,這在像 69. Sqrt(x) 這樣的題目中也是同樣的道理。善用數學推導和公式,可以幫助讀者大幅提升解題效率並更好地理解背後的邏輯。


上一篇
圖解LeetCode(入門篇): 118. Pascal's Triangle
下一篇
圖解LeetCode(入門篇): 121. Best Time to Buy and Sell Stock
系列文
圖解LeetCode(入門篇)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言