130. Surrounded Regions

把所有不和边界的O相连接的O都置为X.
思路: 从边界的O出发,把所有和它相连的O都置为@,dfs递归调用;
再遍历一边,把所有O置为X,再把@重新置为O.
注意重置的时候的顺序,不能先把@置为O,在把O置为X.这样会把@也置为X.

class Solution(object):
    def solve(self, board):
        """
        :type board: List[List[str]]
        :rtype: None Do not return anything, modify board in-place instead.
        """
        if not board:
            return board

        self.m = len(board)
        self.n = len(board[0])
        self.board = board

        for i in [0, self.m - 1]:
            for j in range(self.n):
                if self.board[i][j] == "O":
                    self.dfs(i, j)
        for j in [0, self.n - 1]:
            for i in range(1, self.m - 1):
                if self.board[i][j] == "O":
                    self.dfs(i, j)

        for i in range(0, self.m):
            for j in range(0, self.n):
                if self.board[i][j] == "O":
                    self.board[i][j] = "X"
                if self.board[i][j] == "@":
                    self.board[i][j] = "O"
        return self.board

    def dfs(self, i, j):

        self.board[i][j] = "@"
        di = [0, 0, -1, 1]
        dj = [-1, 1, 0, 0]

        for k in range(4):
            ni = i + di[k]
            nj = j + dj[k]
            if (0 <= ni < self.m) and (0 <= nj < self.n):
                if self.board[ni][nj] == "O":
                    self.dfs(ni, nj)

s = Solution()
res = s.solve([["X","X","X","X"],["X","O","O","X"],["X","X","O","X"],["X","O","X","X"]])
print(res)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容