สมมติว่าเรามีกระดาน 2 มิติที่มี X และ O จับภาพทุกภูมิภาคที่ล้อมรอบด้วย X ภูมิภาคจะถูกบันทึกโดยการเปลี่ยนระบบปฏิบัติการทั้งหมดเป็น 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 |
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
หากไม่มีกระดาน ให้คืนกระดานเปล่า
-
สำหรับฉันในช่วง 0 ถึงจำนวนแถว - 1 −
-
ถ้า board[i, 0] =‘O’ แล้ว make_one(board, i, 0)
-
ถ้าบอร์ด[i, ความยาวของแถว - 1] ='O' แล้ว make_one(บอร์ด, i, ความยาวของแถว - 1)
-
-
สำหรับฉันในช่วง 0 ถึงจำนวน cols - 1 −
-
ถ้าบอร์ด[0, i] ='O' แล้ว make_one(บอร์ด, 0, i)
-
ถ้า board[จำนวนแถว - 1, i] ='O' แล้ว make_one(บอร์ด, นับแถว - 1, i)
-
-
สำหรับผมอยู่ในช่วง 0 ถึงจำนวนแถว
-
สำหรับ j ในช่วง 0 ถึงจำนวน cols
-
ถ้า board[i, j] ='O' แล้ว board[i, j] ='X' มิฉะนั้นสำหรับ 1, board[i, j] ='O'
-
-
-
make_one จะเป็นแบบ -
-
ถ้า i <0 หรือ j <0 หรือ i>=จำนวนแถวหรือ j>=col count หรือ board[i, j] ='X' หรือ board[i, j] ='1' ให้ส่งคืน
-
กระดาน[i, j] :=1
-
โทร make_one(voard, i + 1, j), make_one(voard, i - 1, j), make_one(voard, i, j+1), make_one(voard, i, j - 1)
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
class Solution(object):def Solve(self, board):""" :type board:List[List[str]] :rtype:None ไม่ต้องส่งคืนใดๆ ให้แก้ไขบอร์ดในตำแหน่งแทน """ ถ้าไม่ใช่บอร์ด:return board for i in range(len(board)):if board[i][0]=='O':self.make_one(board,i,0) if board[i][len(board) [0])-1] =='O':self.make_one(board,i,len(board[0])-1) for i in range(len(board[0])):if board[0] [i]=='O':self.make_one(board,0,i) if board[len(board)-1][i] =='O':self.make_one(board,len(board)-1 ,i) สำหรับฉันในช่วง (len(board)):สำหรับ j ในช่วง (len(board[i])):if board[i][j]=='O':board[i][j]='X' elif board[i][j]=='1':board[i][j]='O' def make_one(self, board,i,j):if i<0 or j<0 or i>=len(board) หรือ j>=len(board[0]) หรือ board[i][j]=='X' or board[i][j]=='1':return board[i][ j]='1' self.make_one(กระดาน,i+1,j ) self.make_one(บอร์ด,i-1,j) self.make_one(บอร์ด,i,j+1) self.make_one(บอร์ด,i,j-1)