Surrounded Regions(Leetcode 130)

Problem Link: https://leetcode.com/problems/surrounded-regions/

class Solution:
    def solve(self, board: List[List[str]]) -> None:
        """
        Do not return anything, modify board in-place instead.
        """
        def dfs(i,j,m,n,board):
            # Don't write board[i][j]=="X" because we also have
            # #s in the board which leads to max recursion depth
            # exceeded error
            if(i<0 or j<0 or i>=m or j>=n or board[i][j]!="O"):
                return
            
            board[i][j]="#"
            
            dfs(i-1,j,m,n,board)
            dfs(i,j-1,m,n,board)
            dfs(i+1,j,m,n,board)
            dfs(i,j+1,m,n,board)
        
        
        
        
        m=len(board)
        n=len(board[0])
        for i in range(m):
            if(board[i][0]=="O"):
                dfs(i,0,m,n,board)
            if(board[i][n-1]=="O"):
                dfs(i,n-1,m,n,board)
        
        for j in range(n):
            if(board[0][j]=="O"):
                dfs(0,j,m,n,board)
            if(board[m-1][j]=="O"):
                dfs(m-1,j,m,n,board)
        
        for i in range(m):
            for j in range(n):
                # surrounded by X 
                if(board[i][j]=="O"):
                    board[i][j]="X"
                # connected with borders
                elif(board[i][j]=="#"):
                    board[i][j]="O"             

Last updated