Leetcode--130. 被围绕的区域(java)

给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。

找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。

示例:

X X X X
X O O X
X X O X
X O X X
运行你的函数后,矩阵变为:

X X X X
X X X X
X X X X
X O X X
解释:

被围绕的区间不会存在于边界上,换句话说,任何边界上的 'O' 都不会被填充为 'X'。 任何不在边界上,或不与边界上的 'O' 相连的 'O' 最终都会被填充为 'X'。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。

代码:

class Solution {

    public void solve(char[][] board) {

        if(board.length==0){

            return;

扫描二维码关注公众号,回复: 10812795 查看本文章

        }

        for(int i=0;i<board[0].length;i++){

            helper(board,0,i);

            helper(board,board.length-1,i);

        }

        for(int j=0;j<board.length;j++)

        {

            helper(board,j,0);

            helper(board,j,board[0].length-1);

        }

       /*  for(int i=0;i<board.length;i++)

        {

            for(int j=0;j<board[0].length;j++)

            {

               System.out.print(board[i][j]+" ");

            }

            System.out.println();

        }*/

        for(int i=0;i<board.length;i++)

        {

            for(int j=0;j<board[0].length;j++)

            {

                if(board[i][j]=='Y')

                {

                    board[i][j]='O';

                }

                else if(board[i][j]=='O')

                {

                    board[i][j]='X';

                }

            }

        }

    }

    public void helper(char[][] board,int row,int col)

    {

        if(row<0||row>board.length-1||col<0||col>board[0].length-1){

            return;

        }

        if(board[row][col]=='X'||board[row][col]=='Y'){

            return;

        }

        board[row][col]='Y';

        helper(board,row-1,col);

        helper(board,row+1,col);

        helper(board,row,col-1);

        helper(board,row,col+1);

    }

}

发布了307 篇原创文章 · 获赞 9 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/hx1043116928/article/details/105205128