LeetCode题解:Surrounded Regions
2016-02-09 13:33
423 查看
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
解决思路:BFS和DFS都可以
代码:
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
解决思路:BFS和DFS都可以
代码:
public class Solution { private int row = 0; private int col = 0; private Queue<Integer> queue = new LinkedList<Integer>(); public void solve(char[][] board) { if(board == null || board.length == 0){ return; } row = board.length; col = board[0].length; boolean[][] mark = new boolean[row][col]; for(int i = 0; i < row; i++){ bfs(i, 0, board, mark); bfs(i, col - 1, board, mark); } for(int i = 0; i < col; i++){ bfs(0, i, board, mark); bfs(row - 1, i, board, mark); } for(int i = 0; i < row; i++){ for(int j = 0; j < col; j++){ if(board[i][j] == 'O'){ board[i][j] = 'X'; }else if(board[i][j] == 'C'){ board[i][j] = 'O'; } } } } private void bfs(int x, int y, char[][] board, boolean[][] mark){ mark(x, y, board, mark); while(!queue.isEmpty()){ int curr = queue.poll(); int xPos = curr / col; int yPos = curr % col; mark(xPos + 1, yPos, board, mark); mark(xPos, yPos + 1, board, mark); mark(xPos - 1, yPos, board, mark); mark(xPos, yPos - 1, board, mark); } } private void mark(int x, int y, char[][] board, boolean[][] mark){ if(x < 0 || y < 0 || x >= row || y >= col || mark[x][y] == true || board[x][y] != 'O'){ return; } mark[x][y] = true; board[x][y] = 'C'; queue.offer(x * col + y); } }
相关文章推荐
- search in rotated sorted array leetcode
- 关键词热度是怎么查的
- LeetCode题解:Longest Consecutive Sequence
- 欢迎使用CSDN-markdown编辑器
- 分数拆分
- LSM和B+树区别
- Ubuntu下Qt无法加载Help模块的解决办法
- 5、聚类之层次聚类、基于划分的聚类(k-means)、基于密度的聚类、基于模型的聚类
- Codeforces Round #311 (Div. 2)
- NOI国家集训队论文分类(至2008)
- spark源码学习(二)---Master源码分析(2)-master内组件状态改变机制
- 简单说说glutGet(GLUT_WINDOW_X/Y)与glViewport
- 微信红包随机算法 OC
- Android逆向分析(一) - 反编译看看手Q口令红包的实现原理
- 常用meta整理
- 安装rx10udp1
- NoSQL之Redis(三) --- Redis在项目中的运用
- 使用Bundle在Activity之间交换数据及数据返回
- ubuntu下修改读写权限
- 每天读点“重口味”心理学