
题目分析
- 根据题意这是一道图论搜索题,我们从(row,col)出发向上下左右四个方向进行BFS或者DFS搜索,判断(row,col)是不是连通分量的边界,如果是边界为当前格子上色。搜索的过程中要对已经搜索过的格子进行记录,防止进入死循环。
代码
let colorBorder = function (grid, row, col, color) {
const targetColor = grid[row][col];
const m = grid.length - 1;
const n = grid[0].length - 1;
const result = JSON.parse(JSON.stringify(grid));
const dfs = (row, col) => {
if (grid[row][col] !== targetColor) {
return;
}
grid[row][col] *= -1;
if (
row === 0 ||
row === m ||
col === 0 ||
col === n ||
Math.abs(grid[row - 1][col]) !== targetColor ||
Math.abs(grid[row + 1][col]) !== targetColor ||
Math.abs(grid[row][col - 1]) !== targetColor ||
Math.abs(grid[row][col + 1]) !== targetColor
) {
result[row][col] = color;
}
if (row > 0) {
dfs(row - 1, col);
}
if (row < m) {
dfs(row + 1, col);
}
if (col > 0) {
dfs(row, col - 1);
}
if (col < n) {
dfs(row, col + 1);
}
};
dfs(row, col);
return result;
};