ETH官方钱包

前往
大廳
主題

LeetCode - 130. Surrounded Regions 解題心得

Not In My Back Yard | 2022-04-22 00:00:08 | 巴幣 0 | 人氣 317

題目連結:


題目意譯:
給定一個 m × n 大小的矩陣 board 其包含著字元 'X' 和 'O',請佔領掉所有被 'X' 四方向地(4-directionally)包圍的所有區域。

一個區域被佔領是指在那個被包圍(被 'X')的區域中將所有 'O' 轉換成 'X'。

限制:
m == board.length
n == board[i].length
1 ≦ m, n ≦ 200
board[i][j] 是 'X' 或是 'O'。



範例測資:
範例 1:
輸入: board = [["X","X","X","X"],["X","O","O","X"],["X","X","O","X"],["X","O","X","X"]]
輸出: [["X","X","X","X"],["X","X","X","X"],["X","X","X","X"],["X","O","X","X"]]
解釋: 被包圍的區域不應位於邊界,也就表示任何在 board 邊界的 'O' 都不會被被轉換成 'X'。而任何不在邊界的 'O',只要它沒有連接到(譯者注:這邊的「連接」指的是直接的以及間接的,後面的「連接」則單指直接性的。不過原文的兩邊都只有寫「connected」)一個在邊界上的 'O' 的話就會被轉換成 'X'。兩個格子是連接在一起的,如果它們是在水平或是鉛直方向相鄰。

範例 2:
輸入: board = [["X"]]
輸出: [["X"]]


解題思維:
典型的廣度優先搜尋(Breadth First Search,BFS)之題型,如這題。不過因為邊緣的 'O' 們不會被動到,因此我們需要先把這些邊緣的 'O' 以及直接地或間接地連接到這些邊緣 'O' 的 'O'一併先設為「已處理過」。這樣之後再處理剩餘的 'O' 時就不會動到這些 'O' 了。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作