Surrounded Regions (Java)
来源:互联网 发布:js求两个集合的并集 编辑:程序博客网 时间:2024/05/17 16:45
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 XX O O XX X O XX O X X
After running your function, the board should be:
X X X XX X X XX X X XX O X X
这道题的包围是指上下左右均被x包围的情况,多个O时,是一起被包围,而不是一个O被X消灭后再消灭
比如
X X X X
X O O X
X X X X
两个O外围全是X所以被消灭。
如果遍历时改变O为X,可能会影响其他O是否被消灭。
这道题可以从四周边界处开始考虑,凡是与边界O相连的O都不会被X消灭。
所以从边界O开始进行DFS或BFS。
起初用的DFS写的,java的DFS在这道题中会出现栈溢出。之后用BFS写的可以过。注意每次是将坐标入队列。
Source
public class Solution { public void solve(char[][] board) { if(board.length == 0) return; for(int i = 0; i < board.length; i++){ bfs(i, 0, board); bfs(i, board[0].length - 1, board); } for(int j = 0; j < board[0].length; j++){ bfs(0, j, board); bfs(board.length - 1, j, board); } for(int i = 0; i < board.length; i++){ for(int j = 0; j < board[0].length; j++){ if(board[i][j] == 'O'){ board[i][j] = 'X'; } else if(board[i][j] == '@'){ board[i][j] = 'O'; } } } return; } public void bfs(int i, int j, char[][] board){ if(board[i][j] == 'X') return; if(board[i][j] == '@') return; LinkedList<Integer> queue = new LinkedList<Integer>(); int len = board[0].length; board[i][j] = '@'; int a = i * len + j; //queue里面要存的是坐标 这样才能在BFS的时候传递坐标关系 queue.add(a); while(!queue.isEmpty()){ a = queue.poll(); int r = a / len; int c = a % len; if(r - 1 >= 0 && board[r - 1][c] == 'O'){ board[r - 1][c] = '@'; queue.add((r - 1) * len + c); } if(r + 1 < board.length && board[r + 1][c] == 'O'){ board[r + 1][c] = '@'; queue.add((r + 1) * len + c); } if(c - 1 >= 0 && board[r][c - 1] == 'O'){ board[r][c - 1] = '@'; queue.add(r * len + c - 1); } if(c + 1 < len && board[r][c + 1] == 'O'){ board[r][c + 1] = '@'; queue.add(r * len + c + 1); } } }}
Test
public static void main(String[] args){ char[][] board = {{'X','O','X','X'},{'O','X','O','X'},{'X','O','X','O'},{'O','X','O','X'},{'X','O','X','O'},{'O','X','O','X'}}; new Solution().solve(board); for(int i = 0; i < board.length; i++){ for(int j = 0; j < board[0].length; j++){ System.out.print(board[i][j]); System.out.print(" "); } System.out.println(); } }
0 0
- [Leetcode] Surrounded Regions (Java)
- Surrounded Regions (Java)
- [LeetCode][Java] Surrounded Regions
- [letecode Java] Surrounded Regions
- Surrounded Regions leetcode java
- surrounded-regions Java code
- [leetcode-130]Surrounded Regions(java)
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- [Leetcode] 19 - Remove Nth Node From End of List
- SElinux和SEandroid验证denied处理
- spring+struts+hibernate常见异常总结
- win7 cmd 进入 mysql
- makefile
- Surrounded Regions (Java)
- 数据结构学习之多重链表的一个应用场景
- HDU 1860 统计字符
- java中Frame框架关闭按钮和框架居中的设置方法
- 新手学Android之如何以正确的姿势debug
- UVA The die is cast (BFS)
- 总结了一下自己,我就是喜欢学习,喜欢编程
- 设置UIView圆角的拓展
- oVirt 中的存储管理