本文共 967 字,大约阅读时间需要 3 分钟。
给定一个元素均为'O'和'X'的二维数组,将内部的'O'重置为'X',边界上的'O'保持不变。
测试用例:
Input:X X X XX O O XX X O XX O X XOutput:X X X XX X X XX X X XX O X X
首先,遍历四条边界,如果当前元素是'X',直接continue;如果当前元素是'O',则将其置为'A'(标记),并且将与它相邻的所有'O'也置为'A'。
然后,两层循环遍历数组,将'O'置为'X',将'A'恢复为'O'。
class Solution { public void solve(char[][] board) { if (board == null || board.length <= 2) { return; } //记住左右边界的'O' for (int i=0; i= board.length || j < 0 || j >= board[0].length || board[i][j] == 'X') { return; } board[i][j] = 'A'; if (i-1 >= 0 && board[i-1][j] == 'O') { //上 这里的边界判断其实可以去掉 dfs(board, i-1, j); } if (i+1 < board.length && board[i+1][j] == 'O') { //下 dfs(board, i+1, j); } if (j-1 >= 0 && board[i][j-1] == 'O') { //左 dfs(board, i, j-1); } if (j+1 < board[0].length && board[i][j+1] == 'O') { //右 dfs(board, i, j+1); } }}
转载地址:http://xfnii.baihongyu.com/