**題目描述:**給定乙個二維的矩陣,包含 『x』 和 『o』(字母 o)。找到所有被 『x』 圍繞的區域,並將這些區域裡所有的 『o』 用 『x』 填充。
參考別人的思路,用dfs寫了以下**,遇到了一些坑。。
class
solution
(object):
defsolve
(self, board)
:"""
:type board: list[list[str]]
:rtype: none do not return anything, modify board in-place instead.
"""#從四條邊上的o出發,用dfs把所有相鄰的o變成『p』
#再遍歷陣列,把o變成x,再把『p』變成o
ifnot board or
not board[0]
:return board
m, n =
len(board)
,len
(board[0]
) dx =[1
,-1,
0,0]
dy =[0
,0,1
,-1]
defdfs
(x0, y0)
:for k in
range(4
):x = x0 + dx[k]
y = y0 + dy[k]if0
<= x < m and
0<= y < n and board[x]
[y]==
"o":
board[x]
[y]=
"p" dfs(x, y)
#[0, m-1] 和[0, n - 1]是個list,表示邊界
# for i in [0, m - 1]:
# for j in range(n):
# if board[i][j] == "o":
# board[i][j] = "p"
# dfs(i, j)
# for j in [0, n - 1]:
# for i in range(m):
# if board[i][j] == "o":
# board[i][j] = "p"
# dfs(i, j)
for i in
range
(m):
for j in
range
(n):
if board[i]
[j]==
"o":
if i ==
0or i == m -
1or j ==
0or j == n -1:
board[i]
[j]=
"p" dfs(i, j)
for i in
range
(m):
for j in
range
(n):
if board[i]
[j]==
"o":
board[i]
[j]=
"x"elif board[i]
[j]==
"p":
board[i]
[j]=
"o"
看別人在處理邊界時,用到的兩個迴圈,for i in [0, m -1]和for i in [0, n - 1]
,一開始一直把[0, m -1]當成類似range(0, m)這樣的範圍區間,,死活調了半個多小時通不過,後來怎麼才發現[0, m -1]是個list,,只包含0和m-1兩個數。。。。我太難了。。。。後來終於搞清楚了,自己寫了乙個迴圈,搞定邊界處理。還是要程式設計基礎紮實啊。。。
for i in
range
(m):
for j in
range
(n):
if board[i]
[j]==
"o":
if i ==
0or i == m -
1or j ==
0or j == n -1:
board[i]
[j]=
"p" dfs(i, j)
被X包圍的區域
題目描述 給定乙個二維的矩陣,包含 x 和 o 字母 o 找到所有被 x 圍繞的區域,並將這些區域裡所有的 o 用 x 填充。輸入 輸入樣例由多組資料組成。第一行輸入兩個正整數n,m表示邊界。1 n,m 100 接下來輸入nm個 x 和 o 表示矩陣。輸出 輸出乙個nm的矩陣表示填充後的矩陣。樣例輸...
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 被圍繞的區域
1.所有包含o的邊界上的的格仔,以及它們的鄰居o都不會被包圍,暫時地將這些o標記,通過深度優先搜尋查詢這些o,最後將所有未被標記的o轉換為x class solution def solve self,board list list str none do not return anything,m...