Surrounded Regions

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 X

X O O X

X X O X

X O X X

 

After running your function, the board should be:

X X X X

X X X X

X X X X

X O X X


从四个边入手,把不能换成X的O标记出来,用map存。 然后再遍历这个array, 更改可以变成X的。
 1 public class Solution {

 2     public void solve(char[][] board) {

 3         // Start typing your Java solution below

 4         // DO NOT write main() function

 5         if(board == null || board.length == 0 || board[0].length == 0) return;

 6         boolean[][] map = new boolean[board.length][board[0].length];

 7         int len = board[0].length;

 8         LinkedList<Integer> ll = new LinkedList<Integer>();

 9         for(int i = 0; i < board.length; i ++){

10             if(board[i][0] == 'O' && !map[i][0]){

11                 map[i][0] = true;

12                 ll.push(i * len);

13             } 

14             if(board[i][len - 1] == 'O' && !map[i][len - 1]){ 

15                 map[i][len - 1] = true;

16                 ll.push(i * len + len - 1);

17             }

18         }

19         for(int i = 0; i < len; i ++){

20             if(board[0][i] == 'O' && !map[0][i]){

21                 map[0][i] = true;

22                 ll.push(i);

23             } 

24             if(board[board.length - 1][i] == 'O' && !map[board.length - 1][i]){ 

25                 map[board.length - 1][i] = true;

26                 ll.push((board.length - 1) * len + i);

27             }

28         }

29         while(ll.size() != 0){

30             int tmp = ll.poll();

31             int i = tmp / len;

32             int j = tmp % len;

33             if(i > 1 && board[i - 1][j] == 'O' && !map[i - 1][j]){

34                 map[i - 1][j] = true;

35                 ll.push((i - 1) * len + j);

36             }

37             if(j > 1 && board[i][j - 1] == 'O' && !map[i][j - 1]){

38                 map[i][j - 1] = true;

39                 ll.push(i * len + j - 1);

40             }

41             if(i + 1 < board.length && board[i + 1][j] == 'O' && !map[i + 1][j]){

42                 map[i + 1][j] = true;

43                 ll.push((i + 1) * len + j);

44             }

45             if(j + 1 < len && board[i][j + 1] == 'O' && !map[i][j + 1]){

46                 map[i][j + 1] = true;

47                 ll.push(i * len + j + 1);

48             }

49         }

50         for(int i = 0; i < board.length; i ++)

51             for(int j = 0; j < len; j ++)

52                 if(!map[i][j] && board[i][j] == 'O')

53                     board[i][j] = 'X';

54     }

55 }

 

你可能感兴趣的:(round)