LeetCode-130.Surrounded Regions

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

Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'.

A region is captured by flipping all 'O's into 'X's in that surrounded region.

For example,

X X X X
X O O X
X X O X
X O X X

After running your function, the board should be:

X X X X
X X X X
X X X X
X O X X

常規的一道dfs題。但是存在一個邊界問題

dfs時,對於邊界的判斷,開始時是i>0,j>0,i<m-1,j<n-1,這樣會導致超時,因爲四個邊界已經判斷過了沒必要再判斷

參考 https://leetcode.com/discuss/42445/a-really-simple-and-readable-c-solution%EF%BC%8Conly-cost-12ms

void dfs(vector<vector<char>>&board,int i,int j,int m,int n)
    {
       if(board[i][j]=='O')
       {
            board[i][j]='1';
            if(i>1) dfs(board,i-1,j,m,n);
            if(j>1) dfs(board,i,j-1,m,n);
            if(i<m-2) dfs(board,i+1,j,m,n);
            if(j<n-2) dfs(board,i,j+1,m,n);
       }
    }
    void solve(vector<vector<char>>& board) 
    {
        int i,j;
        int row=board.size();
        if(!row)
            return;
        int col=board[0].size();

        for(i=0;i<row;i++) 
        {    
            dfs(board,i,0,row,col);
            dfs(board,i,col-1,row,col);
        }
        for(j=1;j+1<col;j++)
        {
            dfs(board,0,j,row,col);
            dfs(board,row-1,j,row,col);
        }
        for(i=0;i<row;i++)
        {
            for(j=0;j<col;j++)
            {    
                if(board[i][j]=='O')
                    board[i][j]='X';
                else if(board[i][j]=='1')
                    board[i][j]='O';
            }
        }
    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章