130. 被围绕的区域
Posted 不吐西瓜籽
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了130. 被围绕的区域相关的知识,希望对你有一定的参考价值。
算法记录
LeetCode 题目:
给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。
说明
一、题目
给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。
二、分析
- 被完全围绕的会被同化为
X
, 也就是在边缘区域的不会被同化. - 遍历四个边缘列, 然后再遍历其每个相连的元素即可.
class Solution {
int[][] direction = {{1,0},{-1,0},{0,1},{0,-1}};
public void dfs(char[][] board, int x, int y) {
board[x][y] = '1';
for(int i = 0; i < 4; i++) {
int xk = x + direction[i][0];
int yk = y + direction[i][1];
if(xk < 0 || yk < 0 || xk >= board.length || yk >= board[0].length) continue;
if(board[xk][yk] == 'O') dfs(board, xk, yk);
}
}
public void solve(char[][] board) {
int m = board.length;
int n = board[0].length;
for(int i = 0; i < m; i++) {
if(board[i][0] == 'O') dfs(board, i, 0);
if(board[i][n - 1] == 'O') dfs(board, i, n - 1);
}
for(int i = 0; i < n; i++) {
if(board[0][i] == 'O') dfs(board, 0, i);
if(board[m - 1][i] == 'O') dfs(board, m - 1, i);
}
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
if(board[i][j] == '1') board[i][j] = 'O';
else board[i][j] = 'X';
}
}
}
}
总结
熟悉深度优先搜索。
以上是关于130. 被围绕的区域的主要内容,如果未能解决你的问题,请参考以下文章