【leetcode】Surrounded Regions
Surrounded Regions
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) {
int m=board.size();
if(m==) return;
int n=board[].size(); vector<vector<bool>> visited(m,vector<bool>(n,false));
for(int i=;i<m;i++)
{
if(board[i][]=='O'&&!visited[i][])
{
dfs(board,visited,i,,m,n);
} if(board[i][n-]=='O'&&!visited[i][n-])
{
dfs(board,visited,i,n-,m,n);
}
} for(int j=;j<n;j++)
{ if(board[][j]=='O'&&!visited[][j])
{
dfs(board,visited,,j,m,n);
} if(board[m-][j]=='O'&&!visited[m-][j])
{
dfs(board,visited,m-,j,m,n);
} } for(int i=;i<m;i++)
{
for(int j=;j<n;j++)
{
if(board[i][j]=='O'&&visited[i][j])
{
board[i][j]='X';
}
}
} return;
} void dfs(vector<vector<char>> &board,vector<vector<bool>> &visited,int i,int j,int &m,int &n)
{
if(board[i][j]=='O')
{
visited[i][j]=true;
if(i+<m&&visited[i+][j]==false)dfs(board,visited,i+,j,m,n);
if(j+<n&&visited[i][j+]==false)dfs(board,visited,i,j+,m,n);
if(i->=&&visited[i-][j]==false)dfs(board,visited,i-,j,m,n);
if(j->=&&visited[i][j-]==false)dfs(board,visited,i,j-,m,n);
}
else
{
return;
}
}
};
class Solution {
public:
void solve(vector<vector<char>> &board) {
int m=board.size();
if(m==) return;
int n=board[].size(); queue<pair<int,int>> q; vector<vector<bool>> visited(m,vector<bool>(n,false));
for(int i=;i<m;i++)
{
if(board[i][]=='O') q.push(pair<int,int>(i,));
if(board[i][n-]=='O') q.push(pair<int,int>(i,n-));
} for(int j=;j<n;j++)
{
if(board[][j]=='O') q.push(pair<int,int>(,j));
if(board[m-][j]=='O') q.push(pair<int,int>(m-,j));
} bfs(q,board,visited,m,n); for(int i=;i<m;i++)
{
for(int j=;j<n;j++)
{
if(!visited[i][j]&&board[i][j]=='O') board[i][j]='X';
}
}
} void bfs(queue<pair<int,int>> &q,vector<vector<char>> &board,vector<vector<bool>> &visited,int &m,int &n)
{
while(!q.empty())
{
int ii=q.front().first;
int jj=q.front().second;
visited[ii][jj]=true; q.pop(); if(ii+<m&&!visited[ii+][jj]&&board[ii+][jj]=='O') q.push(pair<int,int>(ii+,jj));
if(ii->=&&!visited[ii-][jj]&&board[ii-][jj]=='O') q.push(pair<int,int>(ii-,jj));
if(jj+<n&&!visited[ii][jj+]&&board[ii][jj+]=='O') q.push(pair<int,int>(ii,jj+));
if(jj->=&&!visited[ii][jj-]&&board[ii][jj-]=='O') q.push(pair<int,int>(ii,jj-));
}
}
};
【leetcode】Surrounded Regions的更多相关文章
- 【leetcode】Surrounded Regions(middle)☆
Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured ...
- 【LeetCode】959. Regions Cut By Slashes 由斜杠划分区域(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题思路 代码 日期 题目地址:https://leetcod ...
- 【leetcode】959. Regions Cut By Slashes
题目如下: In a N x N grid composed of 1 x 1 squares, each 1 x 1 square consists of a /, \, or blank spac ...
- 【LeetCode】BFS(共43题)
[101]Symmetric Tree 判断一棵树是不是对称. 题解:直接递归判断了,感觉和bfs没有什么强联系,当然如果你一定要用queue改写的话,勉强也能算bfs. // 这个题目的重点是 比较 ...
- 【LeetCode】并查集 union-find(共16题)
链接:https://leetcode.com/tag/union-find/ [128]Longest Consecutive Sequence (2018年11月22日,开始解决hard题) 给 ...
- 【LeetCode】深搜DFS(共85题)
[98]Validate Binary Search Tree [99]Recover Binary Search Tree [100]Same Tree [101]Symmetric Tree [1 ...
- 【LeetCode】Island Perimeter 解题报告
[LeetCode]Island Perimeter 解题报告 [LeetCode] https://leetcode.com/problems/island-perimeter/ Total Acc ...
- 【LeetCode】Minimum Depth of Binary Tree 二叉树的最小深度 java
[LeetCode]Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum dept ...
- 【Leetcode】Pascal's Triangle II
Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3 ...
随机推荐
- junit入门
一.简介JUnitJUnit是一个开源的java单元测试框架.在1997年,由 Erich Gamma 和 Kent Beck 开发完成.这两个牛人中 Erich Gamma 是 GOF 之一:Ken ...
- [工具]json转类
摘要 这周在园子看到一篇介绍JsonCSharpClassGenerator这个工具的文章,感觉挺实用的,在现在项目中json用的是最多的,所以在转换对应的类的时候,确实挺频繁,所以就研究了一下这个工 ...
- Memcached存储命令 - add
Memcached add 命令用于将 value(数据值) 存储在指定的 key(键) 中. 如果 add 的 key 已经存在,则不会更新数据,之前的值将仍然保持相同,并且您将获得响应 NOT_S ...
- Job中织梦标签的调用
织梦CMS是一个好东东, 可以让一个网站更好维护和管理, 唯一让我感到忧桑的就是经常在搭后台的时候记不住那些标签,,无奈只能去看手册,有相同的案例直接COPY过来,直接用就OK~~~其实CMS这个东西 ...
- jQuery.Callbacks 源码解读二
一.参数标记 /* * once: 确保回调列表仅只fire一次 * unique: 在执行add操作中,确保回调列表中不存在重复的回调 * stopOnFalse: 当执行回调返回值为false,则 ...
- 前端入门级之如何从零开始前端(估计要被人鄙视成LOW货了)入门篇
<!------------------------------------------------------基本说明开始----------------------------------- ...
- JVM执行引擎总结(读《深入理解JVM》) 早期编译优化 DCE for java
execution engine: 运行时栈current stack frame主要保存了 local variable table, operand stack, dynamic linking, ...
- AlwaysOn可用性组测试环境安装与配置(一)--SQL群集环境搭建
一.测试环境介绍 1. 宿主使用工作站(HYPR-V)基本配置如下: 处理器:Intel(R) Core(TM) i5-4470 CPU @ 3.20GHz 3.20GHz 内存(RAM):8.00G ...
- jquery动态改变my97日期格式
$('#qsrq').unbind('focus'); $('#zzrq').unbind('focus'); $('#qsrq').bind('focus', function () { Wdate ...
- [Storm] 内部消息缓存
这篇文件翻译自 http://www.michael-noll.com/blog/2013/06/21/understanding-storm-internal-message-buffers/ 当进 ...