1、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

思路:(注意什么是被X包围的区域,开始的时候,题我都没读懂。。。)首先将边界上的O以及与边界O相连的O都标记为*,然后将其他的O都变为X,最后将N重新变为O即可

深度优先搜索DFS:

public class solution
{
    public void solve(char[][] board) 
    {
        if(board.length <= 2 || board[0].length<=2)
            return;
        int row=board.length;
        int col=board[0].length;
        for(int i=0;i<row;i++)
        {
            DFS(board,i,0);
            DFS(board,i,col-1);
        }
        for(int i=0;i<col;i++)
        {
            DFS(board,0,i);
            DFS(board,row-1,i);
        }
        for(int i =0;i<row;i++)
        {
            for(int j=0;j<col;j++)
            {
                if(board[i][j] == 'O')
                    board[i][j] ='X';
                if(board[i][j] == '*')
                    board[i][j] ='O';
            }
        }
        
    }
    
    void DFS(char[][] board,int i,int j)
    {
        if(i<0 || i>=board.length || j<0 || j>=board[0].length)
            return;
        if(board[i][j] == 'X')
            return;
        if(board[i][j] == 'O')
        {
            board[i][j] == '*';
            DFS(board,i-1,j);
            DFS(board,i+1,j);
            DFS(board,i,j-1);
            DFS(board,i,j+1);
        }
    }
}
原文地址:https://www.cnblogs.com/westlife-11358/p/10185987.html