130. Surrounded Regions

不知道说啥好,从边缘是O的开始标记不可能变的点,这样时间复杂度只有O(mn)

 

 

 1 class Solution {
 2     public void solve(char[][] board) {
 3         if(board == null) return;
 4         int row = board.length;
 5         if(row == 0) return;
 6         int col = board[0].length;
 7         boolean[][] visited = new boolean[row][col]; 
 8         for(int i = 0; i < row; i++) {
 9             helper(i, 0, board, visited);
10             helper(i, col-1, board, visited);
11         }
12         
13         for(int j = 0; j < col; j++) {
14             helper(0, j, board, visited);
15             helper(row-1, j , board, visited);
16         }
17         
18         
19         for(int i = 0; i < row; i++) {
20             for(int j = 0; j < col; j++) {
21                 if(board[i][j] == 'O') {
22                     board[i][j] = 'X';
23                 }
24                 if(board[i][j] == 'S') {
25                     board[i][j] = 'O';
26                 }
27             }
28         }
29         
30         
31     }
32  
33     public void helper(int i, int j, char[][] board, boolean[][] visited) {
34         
35         if(i < 0 || i > board.length-1 || j < 0 || j > board[0].length-1 || visited[i][j] || board[i][j] != 'O') return;
36         visited[i][j] = true;
37         board[i][j] = 'S';
38         helper(i+1, j, board, visited);
39         helper(i-1, j, board, visited); 
40         helper(i, j+1, board, visited);    
41         helper(i, j-1,board, visited);
42             
43         
44         
45     }
46 }

 

posted @ 2018-09-23 23:29  jasoncool1  阅读(89)  评论(0编辑  收藏  举报