当前位置: 首页 > 后端技术 > Python

力扣-0130.SurroundedRegionssurroundedbytheregion【Python】

时间:2023-03-26 14:12:30 Python

LeetCode0130.SurroundedRegionssurroundedbytheregion【Medium】【Python】【DFS】问题LeetCode给定一个包含'X'和'O'(字母O)的二维板,捕获被“X”包围的所有区域。通过将包围区域中的所有“O”翻转为“X”来捕获区域。示例:XXXXXOOXXXOXXOXX运行函数后,板应为:XXXXXXXXXXXXXOXX解释:被包围的区域不应该在边界上,这意味着棋盘边界上的任何“O”都不会翻转为“X”。任何不在边界上且未连接到边界上的“O”的“O”都将翻转为“X”。如果两个单元格是水平或垂直连接的相邻单元格,则它们是连接的。该问题给出了一个包含“X”和“O”(字母O)的二维矩阵。找到所有被“X”包围的区域,并用“X”填充这些区域中的所有“O”。示例:XXXXXOOXXXOXXOXX运行你的函数后,矩阵变为:XXXXXXXXXXXXXOXX填充'X'。任何不在边界上或未连接到边界上的“O”的“O”最终将被“X”填充。如果两个元素水平或垂直相邻,则称它们“相连”。从对面思考DFS。先找到边界上的“O”(即上下左右四个边),然后改成“*”。再次遍历棋盘矩阵,将“O”更改为“X”,将“*”更改为“O”。这样,问题就变成了从边界找到连通的“O”,就可以使用DFS了。时间复杂度:O(m*n),其中m是行数,n是列数。空间复杂度:O(1),因为变化是基于棋盘矩阵。Python3代码类解决方案:defsolve(self,board:List[List[str]])->None:"""不返回任何东西,就地修改board。"""ifnotboard:returnNonem,n=len(board),len(board[0])方向=[(-1,0),(0,1),(1,0),(0,-1)]defdfs(i,j):if0<=i