力扣130. 被围绕的区域

 

这个题目上栽跟头了,逆向思路没想到,记录一下

题目:【https://leetcode.cn/problems/surrounded-regions/description/?envType=study-plan-v2&envId=top-interview-150

 

 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 };

 

posted @ 2025-04-14 17:01  J&YANG  阅读(6)  评论(0)    收藏  举报