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 }