1.所有包含o的邊界上的的格仔,以及它們的鄰居o都不會被包圍,暫時地將這些o標記,通過深度優先搜尋查詢這些o,最後將所有未被標記的o轉換為x
class
solution
:def
solve
(self, board: list[list[
str]])
->
none
:"""
do not return anything, modify board in-place instead.
"""ifnot board or
not board[0]
:return
rows,cols=
len(board)
,len
(board[0]
) to_expand=
# 將要被檢查的格仔構成的棧
for row in
range
(rows)
:# 把所有邊緣格仔加入棧中
to_expand+=
[(row,0)
,(row,cols-1)
]for col in
range(1
,cols-1)
: to_expand+=[(
0,col)
,(rows-
1,col)
]def
bfs(to_expand):if
(to_expand==
none):
return
row,col=to_expand.pop()if
0<=row0<=col[col]
=="o"
: board[row]
[col]
="f"
(row+
1,col)))
(row,col+1)
))(row-
1,col)))
(row,col-1)
))while to_expand:
bfs(to_expand)
for row in
range
(rows)
:for col in
range
(cols)
:if board[row]
[col]
=="o"
: board[row]
[col]
="x"
elif board[row]
[col]
=="f"
: board[row]
[col]
="o"
另外一種形式
class
solution
:def
solve
(self, board: list[list[
str]])
->
none
:"""
do not return anything, modify board in-place instead.
"""ifnot board or
not board[0]
:return
rows,cols=
len(board)
,len
(board[0]
) to_expand=
# 將要被檢查的格仔構成的棧
for row in
range
(rows)
:# 把所有邊緣格仔加入棧中
to_expand+=
[(row,0)
,(row,cols-1)
]for col in
range(1
,cols-1)
: to_expand+=[(
0,col)
,(rows-
1,col)
]while to_expand:
row,col=to_expand.pop()if
0<=row0<=col[col]
=="o"
: board[row]
[col]
="f"
for dr,dc in[(
1,0)
,(0,
1),(
-1,0
),(0
,-1)
]:(row+dr,col+dc)
)#把所有的f重新變回o,把被包圍的o改為x
for row in
range
(rows)
:for col in
range
(cols)
:if board[row]
[col]
=="o"
: board[row]
[col]
="x"
elif board[row]
[col]
=="f"
: board[row]
[col]
="o"
130 被圍繞的區域
題目 給定乙個二維的矩陣,包含 x 和 o 字母 o 找到所有被 x 圍繞的區域,並將這些區域裡所有的 o 用 x 填充。示例 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 解釋 被圍繞的區間...
130 被圍繞的區域 DFS
難度 中等 題目描述 解題思路 這道題的思路有點巧妙 y 因為邊界上的o和它相鄰的o一定不會被標記,所以可以用逆向思維,先把所有邊界上的o和和它相鄰的o都標記出來,最後把標記還原,沒標記過的變成x 130.被圍繞的區域 2020 7 18 public void solve char board i...
130 被圍繞的區域 (dfs
被圍繞的區域 給定乙個二維的矩陣,包含 x 和 o 字母 o 找到所有被 x 圍繞的區域,並將這些區域裡所有的 o 用 x 填充。示例 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 解釋 被圍...