iT邦幫忙

2025 iThome 鐵人賽

DAY 13
0
自我挑戰組

Leetcode 自學系列 第 13

自學Leetcode Day13

  • 分享至 

  • xImage
  •  

200. Number of Islands
1.題目解題思路:把整個 grid 想像成一張二維地圖,每個 '1' 是「陸地」,每個 '0' 是「水」。題目要我們找出多少個不連通的陸地塊(島嶼)。

  • 一個島嶼的定義是:由相鄰的 '1' 組成的一塊區域(只能上下左右相鄰,不算斜的)。
    2.解題策略
    我們要找出這張地圖中有幾個島嶼。也就是說:
    每當我們遇到一塊新的 '1',就代表我們發現了一個新島嶼,接下來的任務是把這整塊島嶼(所有連通的 '1')標記成已處理,避免之後重複計數。
    這樣一來,我們只要:
    1.遍歷整個 grid
    2.每當遇到一個 '1':
    • 計數 +1
    • 把這塊陸地連通的 '1' 都標記為 '0'(等於「沉沒」它)
      3.標記連通區塊
      可以用兩種圖遍歷方式:
    • DFS(深度優先搜尋)
      遇到 '1',就往上下左右遞迴探索,遇到 '1' 就繼續。
      用遞迴方式搜尋整塊島,並把它們設為 '0'。
    • BFS(廣度優先搜尋)
      用 Queue 來存座標,一層一層往外擴展,把所有 '1' 都變成 '0'。
      適合於逐層探索,但這題其實 DFS 或 BFS 都可以。
      3.範例解析
      範例:
      grid = [
      ["1","1","0","0","0"],
      ["1","1","0","0","0"],
      ["0","0","1","0","0"],
      ["0","0","0","1","1"]
      ]
      1.從左上開始,第 (0,0) 是 '1' → 新島嶼,開始 DFS 把它和相鄰的 '1' 全部設為 '0'
      2.接著到 (2,2) 是孤立的 '1' → 又是一個新島嶼
      3.到 (3,3) 是新的 '1',旁邊還有 (3,4) 是 '1' → 這是一個島嶼
      4最後結果是:3 個島嶼
      4.程式碼截圖(這次採用DFS解法):https://ithelp.ithome.com.tw/upload/images/20250927/20169241kllXhDOQSA.png
      5.BFS vs DFS 比較:
      | 特性 | DFS | BFS |
      | 搜索方式 | 遞迴(或用 Stack) | Queue |
      | 記憶體 | 遞迴堆疊可能較深 | Queue 控制較好 |
      | 適合用在哪裡 | 深度分析、所有節點處理完再回頭 | 分層遍歷、找最短路徑 |
      | 本題適用性 | 兩種都可以(不需找最短距離) | BFS 也很合適 |
      6.學習心得:此次選的題目我覺得有難度,在看第一變的時候有點不知所措,後來就自己嘗試理解題目,也藉由AI的幫忙讓我可以比較理解,也比較知道解題方向,之後我會多嘗試做這類相關的題目,讓自己練習。

上一篇
自學Leetcode Day12
下一篇
自學Leetcode Day14
系列文
Leetcode 自學16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言