《学会同“看不见的敌人”过招》zz# Joke - 肚皮舞运动
d*m
1 楼
思路是从4个边界分别检测,如果是O就替换为T。最后在整体遍历一次,把O的改为X,T
改为O。
过不去的那个test case超级长,自己测不了。麻烦各位大侠给看看代码。
谢谢先~
class Solution {
public:
void turn (int row, int col, vector> &board) {
if (row < 0 || row >= board.size() || col < 0 || col >= board[0].
size() || board[row][col] != 'O' ) {
return;
}
board[row][col] = 'T';
turn(row + 1, col, board);
turn(row - 1, col, board);
turn(row, col + 1, board);
turn(row, col - 1, board);
}
void solve(vector> &board) {
int m = board.size();
if (m == 0) return;
int n = board[0].size();
for (int row = 0; row < m; row++) {
turn(row,0,board);
turn(row,n - 1,board);
}
for (int col = 0; col < n; col++) {
turn(0,col,board);
turn(m - 1,col,board);
}
for (int row = 0; row < m; row++) {
for (int col = 0; col < n; col++) {
if (board[row][col] == 'O') {
board[row][col] = 'X';
}else if (board[row][col] == 'T') {
board[row][col] = 'O';
}
}
}
}
};
改为O。
过不去的那个test case超级长,自己测不了。麻烦各位大侠给看看代码。
谢谢先~
class Solution {
public:
void turn (int row, int col, vector
if (row < 0 || row >= board.size() || col < 0 || col >= board[0].
size() || board[row][col] != 'O' ) {
return;
}
board[row][col] = 'T';
turn(row + 1, col, board);
turn(row - 1, col, board);
turn(row, col + 1, board);
turn(row, col - 1, board);
}
void solve(vector
int m = board.size();
if (m == 0) return;
int n = board[0].size();
for (int row = 0; row < m; row++) {
turn(row,0,board);
turn(row,n - 1,board);
}
for (int col = 0; col < n; col++) {
turn(0,col,board);
turn(m - 1,col,board);
}
for (int row = 0; row < m; row++) {
for (int col = 0; col < n; col++) {
if (board[row][col] == 'O') {
board[row][col] = 'X';
}else if (board[row][col] == 'T') {
board[row][col] = 'O';
}
}
}
}
};