题目很简单,是一个字W阵Q由X和O构成Q找出所有O构成的连通区域,若该区域所有O都在字符阵内?不在边界?Q则把该q通区域所有O都换成XQ其余不?br />
q题一看到想着怎么q么裸的DFSQ于是想也没x完直接REQ看REq回的是I数据,于是加了判board为空的语句,交上去还是REQ因Z前做LeetCodeq种RE的情况都是没有判I,于是换了NU写法判I,q是RE
因ؓ是开了个数组记录字符阉|个元素是否访问过Q又开了另一个数l判该连通区域是否邻边,想着是不是数l开太大了,于是试了各种数组大小Q发现开bool型,只开一个数l能q,后来惛_其实不需要另开一个数l记录是否邻边,搜的时候只搜四边上为O的那些位|,q样一定是邻边的,q个旉复杂度也一些,于是改了Q还是REQ而且挂在大数据上Q但是我q没有开数组Q不会有界发生Q然后就各种吐血的改来改去,l于ACQ虽然还是很莫名...为啥之前会报RE呢?
q是AC的代码:
1 class Solution {
2 public:
3 void DFS(int x, int y, vector<vector<char>> &board) {
4 int tx, ty;
5 if(x >= board.size() || y >= board[0].size() || x < 0 || y < 0 || board[x][y] != 'O') return;
6 board[x][y] = 'Q';
7 DFS(x, y + 1, board);
8 DFS(x, y - 1, board);
9 DFS(x + 1, y, board);
10 DFS(x - 1, y, board);
11 }
12
13 void solve(vector<vector<char>> &board) {
14 if(board.empty()) return;
15 int row = board.size();
16 if(!row) return;
17 int col = board[0].size();
18 if(!col) return;
19 for(int i = 0; i < row; ++i) {
20 if(board[i][0] == 'O') DFS(i, 0, board);
21 if(board[i][col - 1] == 'O') DFS(i, col - 1, board);
22 }
23 for(int i = 0; i < col; ++i) {
24 if(board[0][i] == 'O') DFS(0, i, board);
25 if(board[row - 1][i] == 'O') DFS(row - 1, i, board);
26 }
27 for(int i = 0 ; i < row; ++i) {
28 for(int j = 0; j < col; ++j) {
29 if(board[i][j] == 'Q') board[i][j] = 'O';
30 else if(board[i][j] == 'O') board[i][j] = 'X';
31 }
32 }
33 }
34
35 };

]]>