现在有一个仅包含‘X’和‘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

public class Solution {
    public void solve(char[][] board) {
        
        if(board == null || board.length <= 1 || board[0].length <= 1){
            return;
        }
        int rows = board.length;
        int columns = board[0].length;
      
        //第一列和最后一列为0
        for(int i = 0; i < rows; i++){
            if(board[i][columns-1]=='O'){
                checkBox(board,i,columns-1);
            }
            if(board[i][0]=='O'){
                checkBox(board,i,0);
            }
            
        }
        //第一行和最后一行为0
        for(int j = 0 ; j < columns; j++){
            if(board[0][j] == 'O'){
                checkBox(board,0,j);
            }
            if(board[rows-1][j]=='O'){
                checkBox(board,rows-1,j);
            }
        }
       
        for(int i = 0; i < rows; i++){
            for(int j = 0; j < columns; j++){
                if( 'O' == board[i][j] ){ 
                    board[i][j] = 'X';
                 }
                if( 'B' == board[i][j] ){ 
                    board[i][j] = 'O';
                 }
            }
        }
    }
    public void checkBox(char[][] board, int row, int column){
        if( row < 0 || row >= board.length || column < 0 || column >= board[0].length ){
            return;
        }
        if(board[row][column]=='O'){
            board[row][column]='B';
        }
        if(column < board[0].length-2 && board[row][column+1]=='O'){
            checkBox(board,row,column+1);
        }
        if(column >1 && board[row][column-1]=='O'){
            checkBox(board,row,column-1);
        }
        if(row < board.length-2 && board[row+1][column]=='O'){
            checkBox(board,row+1,column);
        }
        if(row >1 && board[row-1][column]=='O'){
            checkBox(board,row-1,column);
        }
    }
}

 

posted @ 2019-08-15 14:26  紫色的雪  阅读(811)  评论(0编辑  收藏  举报