Surrounded RegionsFeb 22
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 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: void solve(vector<vector<char>> &board) { if (board.size() == 0 ) return ; vector<vector<bool> > flag(board.size()); for (int i = 0; i < board.size(); ++i) { flag[i].resize(board.size(), false); } int dx[] = {0, 0, -1, 1}; int dy[] = {1, -1, 0, 0}; char xxx = 'X'; for (int i = 1; i < board.size() - 1; ++i) { for (int j = 1; j < board.size() - 1; ++j) { if (flag[i][j]) continue; // flood fill if (board[i][j] == 'O') { set<pair<int, int> > s; queue<int> q; s.insert(make_pair(i, j)); flag[i][j] = true; q.push(i); q.push(j); bool is_fill = true; while (!q.empty()) { int x = q.front(); q.pop(); int y = q.front(); q.pop(); for (int k = 0; k < 4; ++k) { if (x+dx[k] < 0 || x+dx[k] >= board.size() || y+dy[k] < 0 || y+dy[k] >= board.size() ) continue; if (flag[x+dx[k]][y+dy[k]]) continue; if (board[x+dx[k]][y+dy[k]] == 'O') { flag[x+dx[k]][y+dy[k]] = true; s.insert(make_pair(x+dx[k], y+dy[k])); q.push(x+dx[k]); q.push(y+dy[k]); if (!is_fill || x+dx[k] == 0 || x+dx[k] == board.size()-1 || y+dy[k] == 0 || y+dy[k] == board.size() - 1) is_fill = false; } } } if (is_fill) { for (auto it = s.begin(); it != s.end(); ++it) { board[it->first][it->second] = xxx; } } } } } } };
脑残,又写一遍。
class Solution { public: void solve(vector<vector<char>> &board) { if (board.size() ==0 ) return; vector<vector<bool> > m(board.size()); for (int i = 0; i < board.size(); ++i) { m[i].resize(board[i].size()); fill(m[i].begin(), m[i].end(), 0); } for (int i = 0; i < board.size(); ++i) { floodfill(i, 0, board, m); floodfill(i, board[i].size()-1, board, m); } for (int i = 0; i < board[0].size(); ++i) { floodfill(0, i, board, m); floodfill(board.size()-1, i, board, m); } for (int i = 0; i < board.size(); i++) { for (int j = 0; j < board[i].size(); j++) { if (board[i][j] == 'O' && m[i][j] == false) board[i][j] = 'X'; } } } void floodfill(int r, int c, const vector<vector<char>>& board, vector<vector<bool>>& m) { if (board[r][c] == 'X' || m[r][c] == true) return; queue<pair<int,int> > q; int x,y, x2, y2; const int dx[] = {0, 0, 1, -1}; const int dy[] = {1, -1, 0, 0}; q.push(make_pair(r,c)); m[r][c] = true; while (!q.empty()) { x = q.front().first; y = q.front().second; q.pop(); for (int i = 0; i < 4; i++) { x2 = x + dx[i]; y2 = y + dy[i]; if (inrange(x2, y2, board) && board[x2][y2] == 'O' && m[x2][y2] == false) { m[x2][y2] = true; q.push(make_pair(x2, y2)); } } } } bool inrange(int i, int j, const vector<vector<char>>& b) { return i >=0 && j >= 0 && i < b.size() && j < b[0].size(); } };
class Solution { public: int n, m; vector<vector<bool> > v; void solve(vector<vector<char>> &board) { auto &a = board; n = a.size(); if (n == 0) return; m = a[0].size(); v.clear(); for (int i = 0; i < n; i++) { v.push_back(vector<bool>(m, 0)); } //floodfill queue<int> x, y; for (int i = 0; i < m; i++) { if (a[0][i] == 'O') x.push(0), y.push(i); if (a[n-1][i] == 'O') x.push(n-1), y.push(i); } for (int i = 1; i < n-1; i++) { if (a[i][0] == 'O') x.push(i), y.push(0); if (a[i][m-1] == 'O') x.push(i), y.push(m-1); } int dx[] = {-1, 1, 0, 0}; int dy[] = {0, 0, -1, 1}; while (!x.empty()) { int curx = x.front(); x.pop(); int cury = y.front(); y.pop(); if (v[curx][cury] == true || a[curx][cury] != 'O') continue; v[curx][cury] = true; a[curx][cury] = '.'; for (int i = 0; i < 4; i++) { if (isOK(curx+dx[i], cury+dy[i]) && a[curx+dx[i]][cury+dy[i]] == 'O') { x.push(curx+dx[i]); y.push(cury+dy[i]); } } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (a[i][j] == '.') a[i][j] = 'O'; else if (a[i][j] == 'O') a[i][j] = 'X'; } } } bool isOK(int x, int y) { return x >= 0 && x < n && y >= 0 && y < m && v[x][y] == false; } };
相关推荐
python python_leetcode题解之130_Surrounded_Regions
vs code LeetCode 插件
《Python版LeetCode题解全集详解》 LeetCode是一个广受欢迎的在线编程挑战平台,致力于帮助程序员提升技能,特别是面试准备。这个压缩包“lc-all-solutions-master”包含了使用Python语言解决LeetCode所有问题的...
《使用leetcode-editor在IDE中进行LeetCode练习的全方位指南》 LeetCode是一个广受欢迎的在线编程练习平台,它提供了一系列的算法题目供程序员们提升技能。对于习惯在集成开发环境(IDE)中工作的开发者来说,将...
3. **Surrounded Regions.cpp** - 第49题,解冑处理的是矩阵中的被包围的区域。通常需要使用深度优先搜索或广度优先搜索策略,通过连通组件的概念来解决这类问题。 4. **N-Queens.cpp** - 这是经典的第51题“N皇后...
"IDEA leetcode-editor插件"就是将这两者结合的工具,允许用户在IDEA中直接进行LeetCode的编程挑战,无需离开开发环境,提高了刷题的便捷性。 该插件的主要功能包括: 1. **离线模式**:在无法访问LeetCode官网的...
terminal-leetcode, 终端Leetcode是基于终端的Leetcode网站查看器 终端 leetcode终端leetcode是基于终端的leetcode网站查看器。本项目是由 RTV 激发的。 我最近正在学习本地化的反应,以实践我的新知识,并根据这个...
(C++)LeetCode刷题题解答案
leetcode刷题, 直接用leetcode的分类方式.
7. leetcode-130-Surrounded-Regions.md:第130题,包围的区域,可能涉及二维数组处理和深度优先搜索(DFS)。 8. leetcode-29-Divide-Two-Integers.md:第29题,两数相除,涉及到整数除法和位运算。 9. leetcode-...
### LeetCode中文版知识点概述 #### 一、LeetCode简介与使用 LeetCode是一个全球知名的在线编程学习平台,主要提供各种算法题目供开发者练习。它不仅涵盖了基础数据结构和算法训练,还包括了大量的面试真题,是...
LeetCode面试笔试题
基于Python实现的LeetCode爬虫爬取LeetCode题目描述和提交的代码.zip ## 特点 - 支持爬取题目列表,保存为本地CSV/Excel文件。 - 支持爬取题目描述,保存为本地HTML文件。 - 支持爬取用户提交的代码,保存为如_.py...
LeetCode-Swift, 快速LeetCode解决方案 LeetCodeLeetCode在线判断是一个包含很多收费算法的网站。 them Google Google Google Google LinkedIn this this repo 。 请免费参考并收费STAR以支持这个 repo,
leetcode 习题集, leetcode 官网出品,包含基本的算法
《LeetCode经典题目全解析》是一份由编程高手精心编撰的文档,旨在全面解析LeetCode平台上众多的算法挑战题目。LeetCode作为一个知名的在线编程练习平台,汇集了各种难度级别的编程题目,涵盖数据结构、算法、设计...
LeetCode 400题目 Java版本 (LeetCode is the platform to help you enhance your skills, expand your knowledge and prepare for technical interviews.)
Source file for LeetCode Permutations Problem
《LeetCode Editor 7.4:提升编程技能的利器》 在编程学习和实践中,LeetCode 已经成为了程序员们磨炼算法、提升编程技能的重要平台。为了方便开发者更高效地进行刷题,LeetCode 提供了官方编辑器插件——LeetCode ...
leetcode算法。本书包含了 LeetCode Online Judge(http://leetcode.com/onlinejudge) 所有题目的答案,所有 代码经过精心编写,编码规范良好,适合读者反复揣摩,模仿,甚至在纸上默写。 全书的代码,使用 C++ 11 的...