leetcode ---- surrounded-regions

leetcode —- surrounded-regions

参考了一些博客,本题的主要思路,是对四边上的’O’进行深度搜索,如果将搜索得到的O替换为星。搜索结束后,再将结果中的O转换为X,并将*转换为O


public class sRSolution {

     public void solve(char[][] board) {
         if(board.length < 3 || board[0].length < 3)
             return ;
         for(int i = 0; i < board.length; i++ ){
             if(board[i][0] == 'O')
                 dfs(board, i, 0);
             if(board[i][board[0].length-1] == 'O')
                 dfs(board, i, board[0].length-1); 
         }
         for(int i = 0; i < board[0].length; i++ ){
             if(board[0][i] == 'O')
                 dfs(board, 0, i);
             if(board[board.length-1][i] == 'O')
                 dfs(board, board.length-1, i); 
         }
         for(int i = 0; i < board.length; i++){
             for(int j = 0; j < board[0].length; j++){
                 if(board[i][j] == 'O')
                     board[i][j] = 'X';
                 if(board[i][j] == '*')
                     board[i][j] = 'O';
             } 
         }       
     }

     public void dfs(char[][] board, int x, int y) {   
         if(x < 0 || y < 0 || x >= board.length || y >= board[0].length || board[x][y] != 'O')
                return;
         board[x][y] = '*';
         dfs(board, x-1, y);
         dfs(board, x+1, y);
         dfs(board, x, y-1);
         dfs(board, x, y+1);
     }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        sRSolution sSR = new sRSolution();
        char [][] board = {{'X','X','X','X'},{'X','O','O','X'},
                {'X','X','O','X'},{'X','O','X','X'}};
        sSR.solve(board);
        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.print('\n');
        }

    }

}

猜你喜欢

转载自blog.csdn.net/liuheng94/article/details/79607114