LeetCode -- Surrounded Regions
来源:互联网 发布:网络时时彩有正规平台 编辑:程序博客网 时间:2024/06/05 22:34
题目描述:
Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'.
A region is captured by flipping all 'O's into '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 board should be:
X X X X
X X X X
X X X X
X O X X
在由'X'和'O'组成的矩阵中,找出所有被'X'包围的'O',将它们替换为'X'。
思路:
1.本题可以DFS也可以BFS,但是DFS速度会慢一些,无法通过测试数据。无论哪种方式,就是从四个边的'O'作为切入点n(如果BFS,需要先将四个边的'O'入队列),遍历时找到n的上下左右邻居,分别进行标记(假设标记为A),凡是标记为A的点即为:不能被围的'O',以这些邻居为中心继续下一次标记。
2.然后对board做一个遍历,把剩余的'O'赋值为'X',而'A'赋值为'O'即可。
实现代码:
Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'.
A region is captured by flipping all 'O's into '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 board should be:
X X X X
X X X X
X X X X
X O X X
在由'X'和'O'组成的矩阵中,找出所有被'X'包围的'O',将它们替换为'X'。
思路:
1.本题可以DFS也可以BFS,但是DFS速度会慢一些,无法通过测试数据。无论哪种方式,就是从四个边的'O'作为切入点n(如果BFS,需要先将四个边的'O'入队列),遍历时找到n的上下左右邻居,分别进行标记(假设标记为A),凡是标记为A的点即为:不能被围的'O',以这些邻居为中心继续下一次标记。
2.然后对board做一个遍历,把剩余的'O'赋值为'X',而'A'赋值为'O'即可。
实现代码:
public class Solution { public void Solve(char[,] board) { var row = board.GetLength(0); var col = board.GetLength(1); if(row < 2 || col < 2){ return; } // try go from left & right boundary var q = new Queue<Pos>(); for(var i = 0;i < row; i++){ if(board[i , 0] == 'O'){ q.Enqueue(new Pos(i , 0)); } if(board[i , col - 1] == 'O'){ q.Enqueue(new Pos(i , col - 1)); } } // try go from top & down boundary for(var i = 0;i < col; i++){ if(board[0,i] == 'O'){ q.Enqueue(new Pos(0 , i)); } if(board[row - 1 , i] == 'O'){ q.Enqueue(new Pos(row - 1 , i)); } } Bfs(ref board, row, col , q); // restore 'A' to 'O' // mark 'O' to 'X' for(var i = 0;i < row; i++){ for(var j = 0;j < col; j++){ if(board[i,j] == 'O'){ board[i,j] = 'X'; } if(board[i,j] == 'A'){ board[i,j] = 'O'; } } } }private void Bfs(ref char[,] board, int rowLen, int colLen, Queue<Pos> q){if(q.Count == 0){return;}var q1 = new Queue<Pos>();while(q.Count > 0){var p = q.Dequeue();board[p.row, p.col] = 'A';// move upif(p.row > 0 && board[p.row - 1, p.col] == 'O'){q1.Enqueue(new Pos(p.row - 1, p.col));}// move downif(p.row < rowLen - 1 && board[p.row + 1, p.col] == 'O'){q1.Enqueue(new Pos(p.row + 1, p.col));}// move rightif(p.col < colLen - 1 && board[p.row, p.col + 1] == 'O'){q1.Enqueue(new Pos(p.row, p.col + 1));}// move leftif(p.col > 0 && board[p.row, p.col - 1] == 'O'){q1.Enqueue(new Pos(p.row, p.col - 1));}}Bfs(ref board, rowLen, colLen, q1);}class Pos{public Pos(int r, int c){row = r;col = c;}public int row;public int col;}}
1 0
- LeetCode : Surrounded Regions
- [leetcode] Surrounded Regions
- leetcode 128: Surrounded Regions
- LeetCode 39: Surrounded Regions
- 【leetcode】Surrounded Regions
- LeetCode - Surrounded Regions
- LeetCode之Surrounded Regions
- leetcode:Surrounded Regions
- [LeetCode]Surrounded Regions
- LeetCode - Surrounded Regions
- [Leetcode]Surrounded Regions
- Leetcode Surrounded Regions
- [leetcode]Surrounded Regions
- leetcode Surrounded Regions
- Leetcode: Surrounded Regions
- LeetCode-Surrounded Regions
- [leetcode] Surrounded Regions
- leetcode Surrounded Regions 详解
- execve函数族详解
- 判断栈的弹出序列
- Struts2中关于"There is no Action mapped for namespace / and action name"的总结
- ubuntu12.04安装或升级firefox至最新版(firefox20.0)
- Maven
- LeetCode -- Surrounded Regions
- AndroidStudio SDK版本下载
- “我的菜谱“APP--添加菜谱功能的实现
- 客户端程序猿技能树
- Java基础之Json数据的操作
- 代码review工具phabricator在win7下的安装使用
- java 两种方式实现字符串倒叙排列
- fork应用---子进程调用execve
- 四、Maven本地资源库