leetccode-130-被围绕的区域

题目描述:

方法一:dfs

class Solution:
    def solve(self, board: List[List[str]]) -> None:
        """
        Do not return anything, modify board in-place instead.
        """
        if not board or len(board)<=2 or len(board[0])<=2:
            return
        row = len(board)
        col = len(board[0])
        def dfs(i,j):
            if i < 0 or j < 0 or i >= row or j >= col or board[i][j] != 'O':
                return
            board[i][j] = '#'
            dfs(i-1,j)
            dfs(i+1,j)
            dfs(i,j+1)
            dfs(i,j-1)
            
        for i in range(row):
            dfs(i,0)
            dfs(i,col-1)
            
        for j in range(col):
            dfs(0,j)
            dfs(row-1,j)
        for i in range(0, row): 
            for j in range(0, col): 
                if board[i][j] == 'O': 
                    board[i][j] = 'X' 
                if board[i][j] == '#': 
                    board[i][j] = 'O'

方法二:并查集

class Solution:
    def solve(self, board: List[List[str]]) -> None:
        """
        Do not return anything, modify board in-place instead.
        """
        f = {}
        def find(x):
            f.setdefault(x,x)
            if f[x]!=x:
                f[x] = find(f[x])
            return f[x]
        def union(x,y):
            f[find(y)] = find(x)
        if not board or not board[0]:
            return
        row,col = len(board),len(board[0])
        dummy = row*col
        for i in range(row):
            for j in range(col):
                if board[i][j] == "O":
                    if i == 0 or i == row - 1 or j == 0 or j == col - 1:
                        union(i * col + j, dummy)
                    else:
                        for x, y in [(-1, 0), (1, 0), (0, -1), (0, 1)]:
                            if board[i + x][j + y] == "O":
                                union(i * col + j, (i + x) * col + (j + y))
                                
        for i in range(row):
            for j in range(col):
                if find(dummy) == find(i * col + j):
                    board[i][j] = "O"
                else:
                    board[i][j] = "X"

 

posted @ 2019-07-16 12:01  oldby  阅读(379)  评论(0)    收藏  举报