iT邦幫忙

2024 iThome 鐵人賽

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

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

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

  • 分享至 

  • xImage
  •  

118. Pascal's Triangle

题目描述:

給定一個非負整數 numRows,生成帕斯卡三角形的前 numRows 行。

Example :
https://ithelp.ithome.com.tw/upload/images/20240904/20168306HN0EpVe5aE.jpg

  • Input: numRows = 5
  • Output: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]

解題思路:
這題是帕斯卡三角形的實作題。最直觀的解法是透過迭代法逐列構建帕斯卡三角形。具體來說,我們可以按以下步驟進行:

  1. 初始化每一列:我們從第一列開始,逐列建立帕斯卡三角形。每一列的開頭和結尾的元素都是1,因此可以先根據列的數量初始化一個元素為1的陣列。

  2. 更新中間的元素:對於每一列,除了開頭和結尾的元素外,其它中間的元素可以通過上一列的相鄰兩個元素相加得到。這樣逐行計算下去,我們就能得到帕斯卡三角形的每一行。

這個方法的好處在於直觀且易於理解。只需要逐列計算,並利用前一列的結果來生成當前列的內容,逐步構建出整個帕斯卡三角形。
https://ithelp.ithome.com.tw/upload/images/20240904/20168306HOU2NrPhXx.jpg

var generate = function(numRows) {
    const triangle = [];

    for (let i = 0; i < numRows; i++) {
        const row = Array(i + 1).fill(1);

        for (let j = 1; j < i; j++) {
            row[j] = triangle[i - 1][j - 1] + triangle[i - 1][j];
        }

        triangle.push(row);
    }

    return triangle;
};

時間複雜度:O(numRows*numRows)。我們需要生成 numRows 行,每一行最多有 numRows 個元素,因此時間複雜度為 O(numRows*numRows)
空間複雜度:O(numRows*numRows),用於存儲帕斯卡三角形的二維陣列。

總結:
這道題目可以歸類為「iteration」(迭代)。透過構建帕斯卡三角形的過程,讀者不僅可以熟悉迭代的概念,還能有效地練習陣列的基本操作,特別是如何處理二維陣列。理解如何構建和操作這樣的資料結構是實際開發中的重要技能,無論是用於數據儲存還是資料處理,都能派上用場。


上一篇
圖解LeetCode(入門篇): 112. Path Sum
下一篇
圖解LeetCode(入門篇): 119. Pascal's Triangle II
系列文
圖解LeetCode(入門篇)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言