【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 ...
随机推荐
- 测试LVS+Keepalived高可用负载均衡集群
测试LVS+Keepalived高可用负载均衡集群 1. 启动LVS高可用集群服务 此时查看Keepalived服务的系统日志信息如下: [root@localhost ~]# tail -f /va ...
- yii2.0-advanced 高级版项目搭建
(一) 原文地址:http://www.yii-china.com/post/detail/1.html (二) 原文地址:http://www.yii-china.com/post/detail/2 ...
- 缺陷跟踪系统Mantis Bug Tracker
缺陷管理平台Mantis,也做MantisBT,全称Mantis Bug Tracker. 项目在github的地址:https://github.com/mantisbt/mantisbt Mant ...
- 新浪微博客户端(59)-hitTest withEvent方法的使用说明
iOS中的触摸事件总是由最顶层的View首先得到的,当这个View得到该触摸事件的时候可以选择通过 - (BOOL)pointInside:(CGPoint)point withEvent:(UIEv ...
- android自定义控件(5)-实现ViewPager效果
对于系统的ViewGroup我们已经是十分熟悉了,最常用的LinearLayout和RelativeLayout几乎是天天要打交道,下面我们就来看看,如何一步一步将其实现: 一.首先当然也是最通常的新 ...
- 弹出框一 之 基于bootstrap和jquery的自定义弹出框
(function ($) { window.Ewin = function () { var html = '<div id="[Id]" class="moda ...
- a标签的target指向iframe
<html> <head> <meta charset="utf-8" /> </head> <body> <ta ...
- 关于Windows下安装mongodb和加入Windows系统启动项
.首先:在http://www.mongodb.org/downloads官网下载最新的win版本的mongodb下载包(我下载到d盘) .加压缩,修改文件夹名字为mongodb,建立放数据库文件夹w ...
- linux网络:常用命令(二)
1.ping命令:与Windows下基本功能一样但也有所区别 1.命令格式: ping [选项] ip地址或域名主机等 选项 -c 加次数 -d 使用Socket的SO_DEBUG功能. -f 极限检 ...
- 有关jquery checkbox获取checked的问题
$("input").attr("checked"); <input type="checkbox" value="1&qu ...