java刷题--130被围绕的区域
Posted Anrys
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java刷题--130被围绕的区域相关的知识,希望对你有一定的参考价值。
题目
代码
class Solution {
public void solve(char[][] board) {
if (board == null || board.length == 0) return;
int m = board.length;
int n = board[0].length;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
boolean isEdge = (i == 0 || j == 0 || i == m - 1 || j == n - 1); //从边界开始
//如果是在边界并且等于0则开始dfs,因为边界上不可能被围绕,从边界开始延伸所有的0都变为#
if (isEdge && board[i][j] == 'O') infect(board, i, j);
}
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (board[i][j] == 'O') { board[i][j] = 'X'; } //将区域的o用x填充;
if (board[i][j] == '#') { board[i][j] = 'O'; } //将o填充#
}
}
}
public void infect(char[][] board, int i, int j) {
if (i < 0 || j < 0 || i >= board.length || j >= board[0].length || board[i][j] == 'X' || board[i][j] == '#') {
// board[i][j] == '#' 说明已经搜索过了.
return;
}
board[i][j] = '#';
infect(board, i - 1, j); // 上
infect(board, i + 1, j); // 下
infect(board, i, j - 1); // 左
infect(board, i, j + 1); // 右
}
}
结果
以上是关于java刷题--130被围绕的区域的主要内容,如果未能解决你的问题,请参考以下文章