Surrounded Regions问题及解法
来源:互联网 发布:美食纪录片 知乎 编辑:程序博客网 时间:2024/05/18 17:02
问题描述:
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.
示例,
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
问题分析:
根据题意,凡事矩阵中的‘O’能找到一条全‘O’的路径,最后一个节点在矩阵的边上,那么这些‘O’元素就不必变成‘X’元素。
首先,我们把边上的’O‘设置为’1‘;其次,遍历每一个元素,若此时元素值为’1‘,则依此展开深度优先遍历,找到与该元素在相邻且值为’O‘的元素,将这些元素值置为’1‘。
最后,我们把为’1‘的元素置为’O‘,为’O‘的元素置为’X‘。
过程详见代码:
class Solution {public:void solve(vector<vector<char>>& board) {int m = board.size();if (!m) return;int n = board[0].size();for (int j = 0; j < n; j++){if (board[0][j] == 'O') board[0][j] = '1';if (board[m - 1][j] == 'O') board[m - 1][j] = '1';}for (int i = 0; i < m; i++){if (board[i][0] == 'O') board[i][0] = '1';if (board[i][n - 1] == 'O') board[i][n-1] = '1';}for (int i = 0; i < m; i++){for (int j = 0; j < n; j++){if (board[i][j] == '1'){bl(board, i, j, m, n);}}}for (int i = 0; i < m; i++){for (int j = 0; j < n; j++){if (board[i][j] == '1'){board[i][j] = 'O';}else if (board[i][j] == 'O'){board[i][j] = 'X';}}}}void bl(vector<vector<char>>& board,int i,int j,int m,int n){if (i + 1 < m && board[i+1][j]=='O'){board[i + 1][j] = '1';bl(board, i + 1, j, m, n);}if (i - 1 >= 0 && board[i - 1][j] == 'O'){board[i - 1][j] = '1';bl(board, i - 1, j, m, n);}if (j - 1 >= 0 && board[i][j - 1] == 'O'){board[i][j - 1] = '1';bl(board, i, j -1, m, n);}if (j + 1 < n && board[i][j + 1] == 'O'){board[i][j + 1] = '1';bl(board, i, j + 1, m, n);}}};
阅读全文
0 0
- Surrounded Regions问题及解法
- leetCode-Surrounded Regions DFS与BFS解法
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- 现在Java程序员面试有多偏,一份面试题让你跪倒在面试官面前
- 性能与优化命令
- 网络管理
- FAT32文件系统之结构初探(一)
- Algorithm-Arrays-6 Kth pascal triangle
- Surrounded Regions问题及解法
- POSIX多线程程序设计学习篇之三(条件变量)
- ZOJ 3194 Coverage【贪心】
- Unity3D shader(12)——Fragment Shader(模型颜色变化)
- A. Arya and Bran
- 百度之星初赛(A) 1 数学 5 模拟 6 判连通(BFS)
- GNU计划的了解
- 《算法导论》第五章-第1节_练习(参考答案)
- ffmpeg android studio集成记录(我草)