[leetcode] Surrounded Regions

来源:互联网 发布:精品淘宝店铺 编辑:程序博客网 时间:2024/06/03 22:05

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 XX O O XX X O XX O X X

After running your function, the board should be:

X X X XX X X XX X X XX O X X
思路:先遍历外面一圈,然后将外面一圈中为O并且与之相邻的O都替换成A,然后再遍历一遍,将A替换成O,将O替换成X

代码:

class Solution {public:    void solve(vector<vector<char>> &board) {        if(board.size() == 0 || board[0].size() == 0)  return;         int row=board.size();        int col=board[0].size();        if(row<=2 || col<=2) return;        for(int j=0;j<col;j++){                search(board,0,j);                search(board,row-1,j);        }        for(int i=0;i<row;i++){                search(board,i,0);                search(board,i,col-1);        }        for(int i = 0; i < row; ++i){               for (int j = 0; j < col; ++j){                  if(board[i][j] == 'O')                      board[i][j] = 'X';                  else if(board[i][j] == 'A')                       board[i][j] = 'O';                     }        }        return;    }        void search(vector<vector<char>> &board, int i,int j){        int row=board.size();        int col=board[0].size();        if(i < 0 || i >= row || j < 0 || j >= col) return;          if(board[i][j] != 'O') return;          board[i][j] = 'A';          search(board,i - 1, j);         search(board,i, j + 1);         search(board,i + 1, j);         search(board,i, j - 1);     }};



0 0