【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 ...
随机推荐
- 安装CentOS7重启后提示License information
Initial setup of CentOS Linux (core) ) [x] Creat user ) [!] License information (no user will be cre ...
- Apple Pay
Apple Pay运行环境:iPhone6以上设备,操作系统最低iOS9.0以上,部分信息设置需要iOS9.2以上.目前还不支持企业证书添加. 环境搭建好后可以在模拟器上面运行,xcode7.2.1+ ...
- Android手机同步电脑端google chrome书签
我先声明:文中FQ 都是博客园自动将中文(fan qiang)转换为FQ的,并不是我本来写的就是FQ~~ 手机和电脑都必须要能登录google(Xee:几乎所有做开发的人都每天的生活都离不开谷歌了,可 ...
- Linux系统安装LAMP
说明: 系统版本:Ubuntu14.04-LTS,可以在Ubuntu官网直接下载.Ubuntu其他版本也可安装本方法搭建LAMP环境! 步骤一,安装apache2 1 sudo apt-get ins ...
- UESTC 1852 Traveling Cellsperson
找规律水题... Traveling Cellsperson Time Limit: 1000ms Memory Limit: 65535KB This problem will be judged ...
- 用MVC的辅助方法自定义了两个控件:“可编辑的下拉框控件”和“文本框日历控件”
接触MVC也没多长时间,一开始学的时候绝得MVC结构比较清晰.后来入了门具体操作下来感觉MVC控件怎么这么少还不可以像ASP.net form那样拖拽.这样设计界面来,想我种以前没学过JS,Jquer ...
- Linux/CentOS 同步网络时间
由于硬件的原因,机器或多或少的跟标准时间对不上,一个月的误差几秒到几分钟不等.对于服务器来说时间不准,会有很多麻烦.例如,支付的时候,无法下单,游戏无法登录等. 方法一:用 ntpdate从时间服务器 ...
- Sublime多行编辑快捷键
鼠标选中多行,按下 Ctrl Shift L (Command Shift L) 即可同时编辑这些行: 鼠标选中文本,反复按 CTRL D (Command D) 即可继续向下同时选中下一个相同的文本 ...
- rem和em,px的使用
rem是CSS3中新增加的一个单位值,他和em单位一样,都是一个相对单位.不同的是em是相对于元素的父元素的font-size进行计算:rem是相对于根元素html的font-size进行计算.这样一 ...
- 运动曲线提升CSS动画效果
原文链接 译文\译者鞠大宝 先有UI动画,然后才会有好的UI动画.好的动画会让人惊叹“哇哦!”——因为页面看上去很流畅.很漂亮,最重要的是,自然,一点都不会让人觉得不和谐或者僵硬死板.如果你经常逛Dr ...