问题: 给你一个 m x n 的矩阵 board ,由若干字符 'X' 和 'O' 组成, 捕获 所有 被围绕的区域 : 连接: 一个单元格与水平或垂直方向上相邻的单元格连接。 区域:连接所有 'O' 的单元格来形成一个区域。 围绕: 如果一个区域中的所有 'O' 单元格都不在棋盘的边缘,则该区域被包围。这样的区域 完全 被 'X' 单元格包围。 通过 原地 将输入矩阵中的所有 'O' 替换为 'X' 来 捕获被围绕的区域 。你不需要返回任何值。 示例 1: 输入: board = [['X','X','X','X'],['X','O','O','X'],['X','X','O','X'],['X','O','X','X']] 输出: [['X','X','X','X'],['X','X','X','X'],['X','X','X','X'],['X','O','X','X']] 解释: 在上图中,底部的区域没有被捕获,因为它在 board 的边缘并且不能被围绕。 示例 2: 输入: board = [['X']] 输出: [['X']] 回答: 遍历四个边界,如果为O的话代表不被围绕 var solve = function(board) { if (!board.length) return []; let m = board.length; let n = board[0].length; var dfs = function(i, j) { if (i < 0 || i >= m || j < 0 || j >= n || board[i][j] != 'O') return; board[i][j] = '#'; dfs(i - 1, j); dfs(i + 1, j); dfs(i, j - 1); dfs(i, j + 1); } //从上下边界进行遍历 for (let j = 0; j < n; j++) { dfs(0, j); dfs(m - 1, j) } //从左右边界进行遍历 for (let i = 0; i < m; i++) { dfs(i, 0); dfs(i, n - 1); } for (let i = 0; i < m; i++) { for (let j = 0; j < n; j++) { if (board[i][j] == 'O') { board[i][j] = 'X'; } else if (board[i][j] == '#') { board[i][j] = 'O' } } } return board; };