[LeetCode] 130
来源:互联网 发布:网络高清摄像头安装方法 编辑:程序博客网 时间:2024/05/16 18:44
130. Surrounded Regions
题目:给定一个包含两种元素'X', 'O'的2维数组,将其中所有被'X‘包围的'O'替换为'X'
思路:除了和边界有接触的’O'的区域,其他的‘O'的区域都会变成'X'。所以扫描一遍边界,对于在边界上的’O', 通过BFS标记与它相邻的'O'。
扫描完成后将未标记的‘O'替换为’X'
代码:
</pre><pre name="code" class="cpp">class Solution {public: void helper(vector<vector<char>>& board, int i, int j) { queue<pair<int, int>> q; pair<int, int> p; p.first = i; p.second = j; board[i][j] = 'M'; q.push(p); int dir[4][2] = {{0,1}, {0,-1}, {1,0}, {-1,0}}; while(!q.empty()) { pair<int, int> g = q.front(); q.pop(); for(int i = 0; i < 4; i++) { int tmpX = dir[i][0] + g.first; int tmpY = dir[i][1] + g.second; if(tmpX < 0 || tmpY < 0 || tmpX >= board.size() || tmpY >= board[0].size()) continue; if(board[tmpX][tmpY] == 'O') { q.push(pair<int,int>(tmpX, tmpY)); board[tmpX][tmpY] = 'M'; } } } } void solve(vector<vector<char>>& board) { int m = board.size(); if(m == 0) return; int n = board[0].size(); for(int i = 0; i < m; i++) { if(board[i][0] == 'O') { helper(board, i, 0); } if(board[i][n-1] == 'O') { helper(board, i, n-1); } } for(int j = 0; j < n; j++) { if(board[0][j] == 'O') { helper(board, 0, j); } if(board[m-1][j] == 'O') { helper(board, m-1, j); } } for(int i = 0; i < m; i++) { for(int j = 0; j < n; j++) { if(board[i][j] == 'M') { board[i][j] = 'O'; } else if(board[i][j] == 'O') { board[i][j] = 'X'; } } } }};
0 0
- [LeetCode] 130
- LeetCode: Surrounded Regions [130]
- LeetCode(130) Surrounded Regions
- [leetcode 130] Surrounded Regions
- LeetCode 130 Surrounded Regions
- Leetcode 130 Surrounded Regions
- LeetCode(130) Surrounded Regions
- leetcode 130: Surrounded Regions
- Leetcode #130 Surrounded Regions
- 130 Surrounded Regions [Leetcode]
- leetcode 130: Surrounded Regions
- LeetCode 130 Surrounded Regions
- leetcode #130 in cpp
- LeetCode 130 Surrounded Regions
- Leetcode 130 Surrounded Regions
- leetCode练习(130)
- LeetCode -130-Surrounded Regions
- [Leetcode] #130 Surrounded Regions
- Codeforces 404D Minesweeper 1D
- java多线程问题
- bzoj3223: Tyvj 1729 文艺平衡树
- React-native iOS简单ListView范例-如何输出不同的cell
- 程序员高手和菜鸟究竟差在哪里?不要错过加薪!
- [LeetCode] 130
- Android:监听应用前后台切换及思考
- 如何在程序中获得wifi信息
- cinder list 报错:ERROR: Malformed request url (HTTP 400)
- Integer.parseInt()和Integer.valueOf()有什么区别
- Java基础(十一)——反射
- POJ 1523 SPF(割点所割连通分量数)
- 几种排序算法 冒泡、快速排序、归并、选择排序等
- JavaSE面向对象之泛型