leetcode之surrounded-regions

本文介绍了一种解决二维棋盘中被'X'包围的'O'区域捕获问题的算法。通过深度优先搜索(DFS)标记边界上的'O'避免误判,最终将未被标记的'O'转化为'X'。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

Given a 2D board containing'X'and'O',capture all regions surrounded by'X'.

A region is captured by flipping all'O'sinto'X's in that surrounded region .

For example,

X X X X

X O O X

X X O X

X O X X

After running your function, the boardshould be:

X X X X

X X X X

X X X X

X O X X

实现

public class Main22 {

       publicint rowNum = 0;

       publicint colNum = 0;

       publicvoid solve(char[][] board) {

              if(board == null || board.length <= 0 || board[0].length <= 0) {

                     return;

              }

              rowNum= board.length;

              colNum= board[0].length;

              for(int i = 0; i < colNum; i++) {

                     dfs(board,0, i);

                     dfs(board,rowNum - 1, i);

              }

              for(int i = 0; i < rowNum; i++) {

                     dfs(board,i, 0);

                     dfs(board,i, colNum - 1);

              }

              for(int i = 0; i < rowNum; i++) {

                     for(int j = 0; j < colNum; j++) {

                            if(board[i][j] == 'O') {

                                   board[i][j]= 'X';

                            }

                     }

              }

              for(int i = 0; i < rowNum; i++) {

                     for(int j = 0; j < colNum; j++) {

                            if(board[i][j] == '*') {

                                   board[i][j]= 'O';

                            }

                     }

              }

       }

       privatevoid dfs(char[][] board, int row, int col) {

              if(board[row][col] == 'O') {

                     board[row][col]= '*';

                     if(row > 1) {

                            dfs(board,row - 1, col);

                     }

                     if(col > 1) {

                            dfs(board,row, col - 1);

                     }

                     if(row < rowNum - 1) {

                            dfs(board,row + 1, col);

                     }

                     if(col < colNum - 1) {

                            dfs(board,row, col + 1);

                     }

              }

       }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值