SurroundedRegions
来源:互联网 发布:软件研发项目立项 编辑:程序博客网 时间:2024/06/11 01:17
1.问题描述
给定一个包含'X'和'O'的2D板,捕捉所有被'X'包围的区域。一个区域通过在所围绕的区域中将所有的'O'翻转成'X'来捕获。
2.解题思路
采用递归解决,若区域中某个位置的元素为'O'则对其元素转换为'*',则对其上下左右相邻元素进行处理
3.程序源码
public void DFS(char[][] board, int row, int col)
{
if(row < 0 || row>(board.length - 1) || col < 0 || col >(board[0].length -1) ) return ;
if(board[row][col] == 'O') //如果row,col指定的位置为'O',则标记为'*',除此之外对其上下左右进行递归处理
{
board[row][col] = '*';
DFS(board, row-1,col);
DFS(board,row+1,col);
DFS(board,row,col-1);
DFS(board,row,col+1);
}
}
public void solve(char[][] board) {
if(board.length <= 0) return;
int row = board.length;
int col = board[0].length;
for(int i = 0 ; i != row ; i++) {
DFS(board,i,col-1); //从第i行第col-1列的元素开始递归处理
DFS(board,i,0);//从第i行第0列元素开始递归处理
}
for(int i = 0 ; i != col ;i++)
{
DFS(board,0,i); //从第0行第i列的元素开始递归处理
DFS(board,row-1,i);//从第row-1行第i列的元素开始递归处理
}
for(int i = 0 ; i != row ; i++)
for(int j = 0 ; j != col ; j++)
{ if(board[i][j] == 'O') board[i][j] = 'X';
if(board[i][j] == '*') board[i][j] = 'O';
}
}
给定一个包含'X'和'O'的2D板,捕捉所有被'X'包围的区域。一个区域通过在所围绕的区域中将所有的'O'翻转成'X'来捕获。
2.解题思路
采用递归解决,若区域中某个位置的元素为'O'则对其元素转换为'*',则对其上下左右相邻元素进行处理
3.程序源码
public void DFS(char[][] board, int row, int col)
{
if(row < 0 || row>(board.length - 1) || col < 0 || col >(board[0].length -1) ) return ;
if(board[row][col] == 'O') //如果row,col指定的位置为'O',则标记为'*',除此之外对其上下左右进行递归处理
{
board[row][col] = '*';
DFS(board, row-1,col);
DFS(board,row+1,col);
DFS(board,row,col-1);
DFS(board,row,col+1);
}
}
public void solve(char[][] board) {
if(board.length <= 0) return;
int row = board.length;
int col = board[0].length;
for(int i = 0 ; i != row ; i++) {
DFS(board,i,col-1); //从第i行第col-1列的元素开始递归处理
DFS(board,i,0);//从第i行第0列元素开始递归处理
}
for(int i = 0 ; i != col ;i++)
{
DFS(board,0,i); //从第0行第i列的元素开始递归处理
DFS(board,row-1,i);//从第row-1行第i列的元素开始递归处理
}
for(int i = 0 ; i != row ; i++)
for(int j = 0 ; j != col ; j++)
{ if(board[i][j] == 'O') board[i][j] = 'X';
if(board[i][j] == '*') board[i][j] = 'O';
}
}
阅读全文
0 0
- SurroundedRegions
- leetcode--SurroundedRegions
- IT的道德与伦理
- 程序人生第一天
- BZOJ1997: [Hnoi2010]Planar
- QT5基础图形的绘制
- iOS与vue交互
- SurroundedRegions
- 短信接口的功能及适用范围
- 如何指定GPU运行程序
- 七周四次课(12月7日) 13.12/13.13 memcache常用方法
- Cocos2d-x 2.0 渲染到纹理深入分析
- Android Studio手动配置Gradle的方法
- oracle filesystemio_options设置
- Intellij IDEA 断点不可用 No executable code found
- TCP 协议