130. Surrounded Regions
来源:互联网 发布:联通3g是什么网络模式 编辑:程序博客网 时间:2024/06/08 16:32
Surrounded Regions
原题叙述
原题链接:https://leetcode.com/problems/surrounded-regions/#/description
Given a 2D board containing ‘X’ and ‘O’ (the letter 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。
例如:初始矩阵如上图,可以看到中间的3个O都是被包围的,所以全部换成X,最下面一行的O由于下面没有被X包围,所以不用替换。
思路
直接考虑被包围的部分比较麻烦,换个角度看,我们只需要考虑不被包围的O就可以了,剩下的O全部换成X就行了。
方法:扫描矩阵的4条边,如果是O的话,从这个点开始层序遍历,凡是和它相连的O(包括自己)都换成其他字符(用来表示不被包围的O),比如“Q”,然后遍历矩阵,凡是O的就表示是被包围的,全部换成X,其他的不被包围的O已经换成了Q,直接替换回O就可以了。
参考代码
class Solution {public: void solve(vector<vector<char>>& board) { int row = board.size(); if(row <= 1) return; int col = board[0].size(); if(col <= 1) return; for(int i = 0; i < row; ++i) { if(board[i][0] == 'O') { BFS(board, i, 0, row, col); } if(board[i][col - 1] == 'O') { BFS(board, i, col - 1, row, col); } } for(int j = 0; j < col; ++j) { if(board[0][j] == 'O') { BFS(board, 0, j, row, col); } if(board[row - 1][j] == 'O') { BFS(board, row - 1, j, row, col); } } 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] == 'Q') board[i][j] = 'O'; } } }private: void BFS(vector<vector<char>>& b, int i, int j, int row, int col) { pair<int, int> p(i, j); pair<int, int> tp; queue<pair<int, int>> q; q.push(p); b[p.first][p.second] = 'Q'; while(!q.empty()) { tp = q.front(); q.pop(); if(tp.first + 1 < row && b[tp.first + 1][tp.second] == 'O') { p.first = tp.first + 1; p.second = tp.second; b[p.first][p.second] = 'Q'; q.push(p); } if(tp.first - 1 >= 0 && b[tp.first - 1][tp.second] == 'O') { p.first = tp.first - 1; p.second = tp.second; b[p.first][p.second] = 'Q'; q.push(p); } if(tp.second - 1 >= 0 && b[tp.first][tp.second - 1] == 'O') { p.first = tp.first; p.second = tp.second - 1; b[p.first][p.second] = 'Q'; q.push(p); } if(tp.second + 1 < col && b[tp.first][tp.second + 1] == 'O') { p.first = tp.first; p.second = tp.second + 1; b[p.first][p.second] = 'Q'; q.push(p); } } }};
0 0
- [LeetCode]130.Surrounded Regions
- LeetCode 130. Surrounded Regions
- [leetcode] 130.Surrounded Regions
- 130. Surrounded Regions
- Leetcode 130. Surrounded Regions
- 130. Surrounded Regions
- 130. Surrounded Regions
- leetcode 130. Surrounded Regions
- leetcode 130. Surrounded Regions
- LeetCode 130. Surrounded Regions
- 130. Surrounded Regions
- [LeetCode]130. Surrounded Regions
- LeetCode 130. Surrounded Regions
- 130. Surrounded Regions
- LeetCode *** 130. Surrounded Regions
- 130. Surrounded Regions
- Leetcode 130. Surrounded Regions
- [leetcode] 130. Surrounded Regions
- eclipse的字体、编码、自动拼写等设置
- 建造者模式
- TestNG的分组测试代码
- quartz整合Spring注入Service时空指针异常问题解决
- oracle in和exist比较
- 130. Surrounded Regions
- pivot
- pop到指定页面,崩溃
- 题目1012:畅通工程(并查集的应用)
- RabbitMQ-官方指南-rabbitmqctl(1) 指南
- python matplotlib.pyplot出现中文乱码问题
- HP-UNIX常见命令实战详解
- 利用caffe训练MLP分类(caffe输入非图像数据)
- sFlow