130. Surrounded Regions(被围绕的区域)

题目链接:https://leetcode.com/problems/surrounded-regions/

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

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

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

思路:

先沿着矩阵的四条边界来广度搜索哪个o是不被同化的,标记一下,后续根据这个标记处理即可。

class Solution {
    public void solve(char[][] board) {
        if(board.length==0||board[0].length==0)
            return;
        int m=board.length;
        int n=board[0].length;
        for(int i=0;i<m;i++){
            if(board[i][0]=='O')
                markToN(board,i,0);
            if(board[i][n-1]=='O')
                markToN(board,i,n-1);
        }
        for(int j=0;j<n;j++){
            if(board[0][j]=='O')
                markToN(board,0,j);
            if(board[m-1][j]=='O')
                markToN(board,m-1,j);
        }
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++){
                if(board[i][j]=='O')
                    board[i][j]='X';
                if(board[i][j]=='N')
                    board[i][j]='O';
            }
    }
    public void markToN(char[][] board,int i,int j){
        if(i<0||i>=board.length||j<0||j>=board[0].length||board[i][j]!='O')
            return;
        board[i][j]='N';
        markToN(board,i+1,j);
        markToN(board,i-1,j);
        markToN(board,i,j+1);
        markToN(board,i,j-1);
    }
}

猜你喜欢

转载自blog.csdn.net/God_Mood/article/details/89281068
今日推荐