从边缘的O开始进行递归标记,最终进行还原,标记了的不符合条件
var solve = function(board) {
let m = board.length;
if(m == 0){return};
let n = board[0].length;
let cannot = {};
let dfs = function(i, j) {
if( i<0 ||i===m || i<0 || j<0 || j===n || cannot[i+'-'+j] || board[i][j]!== 'O'){
return
}
cannot[i+'-'+j] = true
dfs(i-1, j)
dfs(i+1, j)
dfs(i, j-1)
dfs(i, j+1)
}
// 从边缘开始发散进行递归标记
for(let i=0; i<m; i++){
for(let j=0; j<n; j++){
if((i===0 || j===0 || i=== m-1 || j === n-1) && board[i][j] === 'O') {
dfs(i, j)
}
}
}
// 去除边界条件处理
for(let i=1; i<m-1; i++){
for(let j=1; j<n-1; j++){
if(!cannot[i + '-' + j] && board[i][j] === 'O') {
board[i][j] = 'X'
}
}
}
};
网友评论