package com.bupt.acm.leetcode; public class SurroundedRegions { public void solve(char[][] board){ boolean up,down,left,right; for(int i=1;i<board.length-1;i++){ for(int j=1;j<board[0].length-1;j++){ up=down=left=right=false; if(board[i][j]=='O'){ //全是true,表示o可以反转为x up=up(board,i,j); if(!up) continue; down=down(board,i,j); if(!down) continue; left=left(board,i,j); if(!left) continue; right=right(board,i,j); if(!right) continue; board[i][j]='X'; } } } } //按行up:down public boolean up(char[][] board,int row,int col){ if(board[row-1][col]=='O') return false; return true; } public boolean down(char[][] board,int row,int col){ for(int i=row+1;i<board.length;i++){ if(board[i][col]=='X') return true; } return false; } //按列 left:right public boolean left(char[][] board,int row,int col){ if(board[row][col-1]=='O'){ return false; } return true; } public boolean right(char[][] board,int row,int col){ for(int i=col+1;i<board[0].length;i++){ if(board[row][i]=='X') return true; } return false; } public static void main(String[] args){ char[][] board={{'X','X','X'},{'X','O','X'},{'X','X','X'}}; for(int i=0;i<board.length;i++){ for(int j=0;j<board.length;j++) System.out.print(board[i][j]+" "); System.out.println(); } System.out.println("---------------------"); SurroundedRegions su=new SurroundedRegions(); su.solve(board); for(int i=0;i<board.length;i++){ for(int j=0;j<board.length;j++) System.out.print(board[i][j]+" "); System.out.println(); } } }