diff --git a/src/main/java/leetcode/editor/cn/SurroundedRegions.java b/src/main/java/leetcode/editor/cn/SurroundedRegions.java new file mode 100644 index 0000000..3f93560 --- /dev/null +++ b/src/main/java/leetcode/editor/cn/SurroundedRegions.java @@ -0,0 +1,104 @@ +//给你一个 m x n 的矩阵 board ,由若干字符 'X' 和 '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"]] +//解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的 'O' 都不会被填充为 'X'。 任何不在边界上,或不与边界上的 'O' 相连的 'O' 最终都 +//会被填充为 'X'。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。 +// +// +// 示例 2: +// +// +//输入:board = [["X"]] +//输出:[["X"]] +// +// +// +// +// 提示: +// +// +// m == board.length +// n == board[i].length +// 1 <= m, n <= 200 +// board[i][j] 为 'X' 或 'O' +// +// +// +// Related Topics 深度优先搜索 广度优先搜索 并查集 数组 矩阵 +// 👍 587 👎 0 + +package leetcode.editor.cn; + +import javafx.util.Pair; + +import java.util.LinkedList; +import java.util.Queue; + +//130:被围绕的区域 +class SurroundedRegions { + public static void main(String[] args) { + //测试代码 + Solution solution = new SurroundedRegions().new Solution(); + } + + //力扣代码 + //leetcode submit region begin(Prohibit modification and deletion) + class Solution { + public void solve(char[][] board) { + boolean[][] use = new boolean[board.length][board[0].length]; + Queue> queue = new LinkedList<>(); + for (int i = 0; i < board.length; i++) { + if (board[i][0] == 'O') { + queue.add(new Pair<>(i, 0)); + use[i][0] = true; + } + if (board[i][board[0].length - 1] == 'O') { + queue.add(new Pair<>(i, board[0].length - 1)); + use[i][board[0].length - 1] = true; + } + } + for (int i = 1; i < board[0].length - 1; i++) { + if (board[0][i] == 'O') { + queue.add(new Pair<>(0, i)); + use[0][i] = true; + } + if (board[board.length - 1][i] == 'O') { + queue.add(new Pair<>(board.length - 1, i)); + use[board.length - 1][i] = true; + } + } + int[] xIndex = new int[]{-1, 1, 0, 0}; + int[] yIndex = new int[]{0, 0, -1, 1}; + while (!queue.isEmpty()) { + Pair pair = queue.poll(); + for (int i = 0; i < 4; i++) { + int x = pair.getKey() + xIndex[i]; + int y = pair.getValue() + yIndex[i]; + if (x < 0 || x >= board.length || y < 0 || y >= board[0].length || use[x][y] || board[x][y] == 'X') { + continue; + } + queue.add(new Pair<>(x, y)); + use[x][y] = true; + } + } + for (int i = 0; i < board.length; i++) { + for (int j = 0; j < board[0].length; j++) { + if (board[i][j] == 'O' && !use[i][j]) { + board[i][j] = 'X'; + } + } + } + } + } +//leetcode submit region end(Prohibit modification and deletion) + +} \ No newline at end of file diff --git a/src/main/java/leetcode/editor/cn/SurroundedRegions.md b/src/main/java/leetcode/editor/cn/SurroundedRegions.md new file mode 100644 index 0000000..22bd917 --- /dev/null +++ b/src/main/java/leetcode/editor/cn/SurroundedRegions.md @@ -0,0 +1,33 @@ +给你一个 m x n 的矩阵 board ,由若干字符 'X''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"]]
+解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的 'O' 都不会被填充为 'X'。 任何不在边界上,或不与边界上的 'O' 相连的 'O' 最终都会被填充为 'X'。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。
+
+ +

示例 2:

+ +
+输入:board = [["X"]]
+输出:[["X"]]
+
+ +

 

+ +

提示:

+ +
    +
  • m == board.length
  • +
  • n == board[i].length
  • +
  • 1 <= m, n <= 200
  • +
  • board[i][j]'X''O'
  • +
+
+
+
Related Topics
  • 深度优先搜索
  • 广度优先搜索
  • 并查集
  • 数组
  • 矩阵
  • \n
  • 👍 587
  • 👎 0
  • \ No newline at end of file