力扣130. 被围绕的区域
这个题目上栽跟头了,逆向思路没想到,记录一下
1 class Solution { 2 public: 3 void body(vector<vector<char>>& board, int x, int y, char c) 4 { 5 if (x < 0 || x > board[0].size() - 1 || y < 0 || y > board.size() - 1 || 'O' != board[y][x]) 6 return ; 7 8 board[y][x] = c; 9 body(board, x + 1, y, c); 10 body(board, x, y + 1, c); 11 body(board, x - 1, y, c); 12 body(board, x, y - 1, c); 13 } 14 15 void solve(vector<vector<char>>& board) { 16 if (board.size() < 3 || board[0].size() < 3) 17 return ; 18 19 for (int i = 0; i < board[0].size(); ++i) { 20 if ('O' == board[0][i]) body(board, i, 0, '1'); 21 if ('O' == board[board.size() - 1][i]) body(board, i, board.size() - 1, '1'); 22 } 23 24 for (int i = 1; i < board.size() - 1; ++i) { 25 int j = 0; 26 if ('O' == board[i][j]) body(board, j, i, '1'); 27 j = board[0].size() - 1; 28 if ('O' == board[i][j]) body(board, j, i, '1'); 29 } 30 31 for (int i = 0; i < board.size(); ++i) 32 for (int j = 0; j < board[0].size(); ++j) { 33 if ('O' == board[i][j]) 34 board[i][j] = 'X'; 35 else if ('1' == board[i][j]) 36 board[i][j] = 'O'; 37 } 38 39 } 40 };
浙公网安备 33010602011771号