Skip to content

130. 被围绕的区域 ​

  • 题号:130
  • 来源:LeetCode
  • 难度:中等
  • 标签:DFS 矩阵
  • 语言:TypeScript
  • 解法:1 个
  • 作者:lmliheng
  • 最近更新:2026-09-27

TypeScript · O(m*n) 时间 · O(m*n) 空间 · 更新于 2026-09-27

DFS 标记连通块,触边界的不改成 X

typescript
/**
 * @difficulty medium
 * @tags DFS,矩阵
 * @time O(m*n)
 * @space O(m*n)
 * @note DFS 标记连通块,触边界的不改成 X
 * @130. 被围绕的区域
 */

let board: string[][] = [
    ["X","O","X","X"],
    ["O","X","O","X"],
    ["X","O","X","O"],
    ["O","X","O","X"],
    ["X","O","X","O"],
    ["O","X","O","X"]
]

let arr: number[][] = []
let m: number = board.length
let n: number = board[0].length
let copyBoard: string[][] = new Array(m);
for (let i = 0; i < m; i++) {
    copyBoard[i] = new Array(n);
    for (let j = 0; j < n; j++) {
        copyBoard[i][j] = board[i][j];
    }
}

console.log(m, n)

const dfs = (i: number, j: number): void => {
    if (i < 0 || i >= m || j < 0 || j >= n) {
        return
    }

    if (copyBoard[i][j] !== 'O') {
        return
    }
    copyBoard[i][j] = 'M'
    console.log('遍历0:', i, j)
    arr.push([i, j])

    dfs(i + 1, j)
    dfs(i, j + 1)
    dfs(i, j - 1)
    dfs(i - 1, j)
}

const arrFn = (): void => {
    console.log('arr:', arr)
    let isUpate: boolean = true
    for (let i = 0; i < arr.length; i++) {
        if (arr[i][0] === 0 || arr[i][1] === 0 || arr[i][0] === m - 1 || arr[i][1] === n - 1) {
            isUpate = false
        }
    }
    if (isUpate) {
        for (let i = 0; i < arr.length; i++) {
            board[arr[i][0]][arr[i][1]] = 'X'
        }
    }
    arr = []
}

for (let i = 0; i < m; i++) {
    for (let j = 0; j < n; j++) {
        if (copyBoard[i][j] === 'O') {
            dfs(i, j)
            arrFn()
        }
    }
}

console.log(board)
console.log(copyBoard)

export {};

源码:ts/leetcode/130. 被围绕的区域.ts


在 GitHub 上查看题目所在目录:lmliheng/algorithm