130. Surrounded Regions

该题是要将被X包围的O区域用X覆盖,处于边界的O区域不算是被X包围。

主要解决思路是遍历边框的的元素,如果是O,那么从该区域开始,进行深度遍历,将是O的区域改成Y,表示这个区域是没有被包围的。完成边框遍历后,剩下的O区域都是被X包围的了。对所有元素进行遍历,将O改成X, 将Y改回O即可。

代码如下:

 1 class Solution {
 2     public void solve(char[][] board) {
 3         if( board.length == 0 || board == null ){
 4             return;
 5         }
 6         
 7         int m = board.length, n = board[0].length;
 8         
 9         for(int i = 0, j = 0 ; i < m; i++){
10             if(board[i][j] == 'O'){
11                 occupy(board, i, j);
12             }
13         }
14         
15         for(int i = 0, j = n - 1 ; i < m; i++){
16             if(board[i][j] == 'O'){
17                 occupy(board, i, j);
18             }           
19         }
20         
21         for(int i = 0, j = 0; j < n ; j++){
22             if(board[i][j] == 'O'){
23                 occupy(board, i, j);
24             }            
25         }
26         
27         for(int i = m - 1, j = 0 ; j < n; j++){
28             if(board[i][j] == 'O'){
29                 occupy(board, i, j);
30             }            
31         }
32         
33         for(int i = 0 ; i < m ; i++){
34             for(int j = 0; j < n ; j++){
35                 if(board[i][j] == 'O'){
36                     board[i][j] = 'X';
37                 }
38                 
39                 if(board[i][j] == 'Y'){
40                     board[i][j] = 'O';
41                 }
42             }
43         }
44         
45     }
46     
47     private void occupy(char[][] board, int i, int j){
48         board[i][j] = 'Y';
49         
50         int m = board.length, n = board[0].length;
51         if( i + 1 < m && board[i+1][j] == 'O'){
52             occupy(board, i + 1, j);
53         }
54         
55         if( i - 1 >= 0 && board[i-1][j] == 'O' ){
56             occupy(board, i - 1, j);
57         }
58         
59         if( j + 1 < n && board[i][j+1] == 'O'){
60             occupy(board, i , j + 1);
61         }
62         
63         if( j - 1 >= 0 && board[i][j-1] == 'O'){
64             occupy(board, i, j - 1);
65         }
66     }
67 }

END

原文地址:https://www.cnblogs.com/sssysukww/p/9002464.html