[Medium]Surrounded Regions
来源:互联网 发布:淘宝商家开通花呗 编辑:程序博客网 时间:2024/06/05 09: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.
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
解法:
源码:
class Solution {public: vector<int> f; int fa(int a) { if (f[a] == a) return a; f[a] = fa(f[a]); return f[a]; } void un(int a, int b) { f[a] = fa(f[a]); f[b] = fa(f[b]); if (f[a] == f[b]) return; f[f[a]] = f[b]; } void solve(vector<vector<char>>& board) { int n = board.size(); if (n == 0) return; int m = board[0].size(), i, j, len = m * n; f.resize(len); for (int p = 0; p < len; ++p) { i = p / m; j = p % m; if (board[i][j] == 'O') {f[p] = p;} else f[p] = -1; } for (int p = 0; p < len; ++p) { if (f[p] == -1) continue; i = p / m; j = p % m; if (i && board[i-1][j] == 'O') un(p, p-m); if (j && board[i][j-1] == 'O') un(p, p-1); } for (int p = 0; p < len; ++p) { if (f[p] != -1) fa(p); } for (i = 0; i < n; ++i) { if (f[i*m] != -1) { int p = f[i*m]; int i1 = p / m, j1 = p % m; board[i1][j1] = 'U'; } if (f[i*m+m-1] != -1) { int p = f[i*m+m-1]; int i1 = p / m, j1 = p % m; board[i1][j1] = 'U'; } } for (j = 0; j < m; ++j) { if (f[j] != -1) { int p = f[j]; int i1 = p / m, j1 = p % m; board[i1][j1] = 'U'; } if (f[n*m-m+j] != -1) { int p = f[n*m-m+j]; int i1 = p / m, j1 = p % m; board[i1][j1] = 'U'; } } for (int p = 0; p < len; ++p) { if (f[p] == -1) continue; i = f[p] / m; j = f[p] % m; int i1 = p / m; int j1 = p % m; if (board[i][j] == 'O' || board[i][j] == 'X') board[i1][j1] = 'X'; } for (int p = 0; p < len; ++p) { if (f[p] == -1) continue; i = f[p] / m; j = f[p] % m; if (board[i][j] == 'U') board[i][j] = 'O'; } }};
0 0
- [Medium]Surrounded Regions
- [Leetcode 130, medium] 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
- Surrounded Regions
- [Medium]Gas Station
- JavaSE 之 ----- 对象相关基本知识总结
- 微信数据库解密 破解 查看聊天消息
- 关于spring mvc不拦截静态资源的配置
- Eclipse 创建MAVEN工程时,jdk版本的修改
- [Medium]Surrounded Regions
- [Medium] Jump Game
- 事件冒泡捕获及3个阶段
- [Medium]Number of Islands
- ZOrder
- 浏览器下载模板中文乱码
- HBase 原理
- [Easy]House Robber
- Pip源