【Leetcode】Surrounded Region in JAVA

来源:互联网 发布:绿色自行车是什么软件 编辑:程序博客网 时间:2024/05/16 01:18

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 XX O O XX X O XX O X X

After running your function, the board should be:

X X X XX X X XX X X XX O X X
看完题目相信大家都有个思路:只要这个0是在边界,那么它肯定不行,而且所有和这个0相连接的0都不行。所以我们首先找到边界上的0,然后进行dfs找到与它相连接的0,别切用一个boolean数组标记已经来过。

public class surroundedRegions {public static void main(String args[]){surroundedRegions sr = new surroundedRegions();char sample[][]={{'X','X','X'},{'X','0','X'},{'X','X','X'}};sr.solve(sample);for(int i=0;i<sample.length;i++){        for(int j=0;j<sample[0].length;j++){        System.out.print(sample[i][j]);        } System.out.println(); }}public void solve(char[][] board) {          if (board == null || board.length == 0) {              return;          }          int height = board.length;          int width = board[0].length;          boolean[][] visit = new boolean[height][width];           for(int i = 0 ; i < width; i++){              if(board[0][i] == 'O')  visit[0][i] = true;              if(board[height - 1][i] == 'O') visit[height - 1][i] = true;          }          for(int i = 0 ; i < height; i++){              if(board[i][0] == 'O') visit[i][0] = true;              if(board[i][width - 1] == 'O') visit[i][width - 1] = true;          }          for(int i = 0 ; i < visit.length; i++){              for(int j = 0; j < visit[0].length;j++){                  if(visit[i][j]){                      dfs(board, visit, i, j);                  }              }          }          for(int i = 1; i < height; i++){              for(int j = 1; j < width; j++){                  if(board[i][j] == 'O' && !visit[i][j]){                      board[i][j] = 'X';                  }              }          }      }      private void dfs(char[][] board,boolean[][] visit,int i ,int j){          visit[i][j] = true;          if(i > 0 && board[i - 1][j] == 'O' && !visit[i - 1][j]){              dfs(board, visit, i - 1, j);          }          if(i < visit.length - 1 && board[i + 1][j] == 'O' && !visit[i + 1][j]){              dfs(board, visit, i + 1, j);          }          if(j > 0 && board[i][j - 1] == 'O' && !visit[i][j - 1]){              dfs(board, visit, i, j - 1);          }          if(j < visit[0].length - 1 && board[i][j + 1] == 'O' && !visit[i][j + 1]){              dfs(board, visit, i, j + 1);          }      }  



0 0