Leetcode959. Regions Cut By Slashes由斜杠划分区域
在由 1 x 1 方格组成的 N x N 网格 grid 中,每个 1 x 1 方块由 /、\ 或空格构成。这些字符会将方块划分为一些共边的区域。
(请注意,反斜杠字符是转义的,因此 \ 用 "\\" 表示。)。
返回区域的数目。
示例 1:
输入: [ " /", "/ " ] 输出:2 解释:2x2 网格如下:
示例 2:
输入: [ " /", " " ] 输出:1 解释:2x2 网格如下:
示例 3:
输入: [ "\\/", "/\\" ] 输出:4 解释:(回想一下,因为 \ 字符是转义的,所以 "\\/" 表示 \/,而 "/\\" 表示 /\。) 2x2 网格如下:
示例 4:
输入: [ "/\\", "\\/" ] 输出:5 解释:(回想一下,因为 \ 字符是转义的,所以 "/\\" 表示 /\,而 "\\/" 表示 \/。) 2x2 网格如下:
示例 5:
输入: [ "//", "/ " ] 输出:3 解释:2x2 网格如下:
提示:
- 1 <= grid.length == grid[0].length <= 30
- grid[i][j] 是 '/'、'\'、或 ' '。
思路转换一下,然后再搜索就可以了。
最开始是将大小 * 2,但是在{"//", "/ "};这个案列中就错误了,仔细想想为什么。
然后换成 * 3的就可以了。
class Solution {
public:
vector<vector<bool> > Map;
vector<vector<bool> > Visit;
int dx[4] = {1,-1,0,0};
int dy[4] = {0,0,1,-1};
int N;
int regionsBySlashes(vector<string>& grid)
{
N = grid.size();
Map = vector<vector<bool> >(N * 3, vector<bool>(N * 3, false));
Visit = vector<vector<bool> >(N * 3, vector<bool>(N * 3, false));
int cntAns = 0;
for(int i = 0; i < N; i++)
{
for(int j = 0; j < grid[i].size(); j++)
{
if(grid[i][j] == '\\')
{
Map[3 * i][3 * j] = true;
Map[3 * i + 1][3 * j + 1] = true;
Map[3 * i + 2][3 * j + 2] = true;
}
else if(grid[i][j] == '/')
{
Map[3 * i][3 * j + 2] = true;
Map[3 * i + 1][3 * j + 1] = true;
Map[3 * i + 2][3 * j] = true;
}
}
}
/*
for(int i = 0; i < 3 * N; i++)
{
for(int j = 0; j < 3 * N; j++)
{
cout << Map[i][j] << (j == 3 * N - 1? '\n' : ' ');
}
}
//*/
for(int i = 0; i < 3 * N; i++)
{
for(int j = 0; j < 3 * N; j++)
{
if(Map[i][j] == false && Visit[i][j] == false)
{
cntAns++;
BFS(i , j);
}
}
}
return cntAns;
}
void BFS(int x, int y)
{
queue<pair<int, int> > q;
q.push(make_pair(x, y));
Visit[x][y] = true;
while(!q.empty())
{
int i = q.front().first;
int j = q.front().second;
q.pop();
for(int k = 0; k < 4; k++)
{
int ii = i + dx[k];
int jj = j + dy[k];
if(ii < 0 || ii >= 3 * N || jj < 0 || jj >= 3 * N)
continue;
if(Visit[ii][jj] == true || Map[ii][jj] == true)
continue;
Visit[ii][jj] = true;
q.push(make_pair(ii, jj));
}
}
}
};
方法二:
并查集(未想出,带更新)
Leetcode959. Regions Cut By Slashes由斜杠划分区域的更多相关文章
- 【LeetCode】959. Regions Cut By Slashes 由斜杠划分区域(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题思路 代码 日期 题目地址:https://leetcod ...
- LC 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 space. Th ...
- [Swift]LeetCode959. 由斜杠划分区域 | 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 space. Th ...
- 【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 959. Regions Cut By Slashes
原题链接在这里:https://leetcode.com/problems/regions-cut-by-slashes/ 题目: In a N x N grid composed of 1 x 1 ...
- mysql 列名中 包含斜杠或者空格的处理方式
今天客户那边遇到了一个比较奇葩的问题跑来问我,这个问题比较冷门,所以特别记录下. 问题描述 数据库的字段存在斜杠或者空格的时候,怎么用sql进行insert或者select操作. 问题解答 对于这种特 ...
- JAVA正则表达式中如何匹配反斜杠 \
有时候我们需要匹配反斜杠,你可能会把对应的正则表达式写成 "\\" 然后可能会有如下输出: Exception in thread "main" java.ut ...
- (转载)PHPCMS V9专题路径多了一个斜杠的解决办法
PHPCMSV9的专题,在设置生成静态并且网站的静态设置成生成在根目录的时候,专题路径的URL中会多出一个斜杠,如:http://www.2cto.com//special/ddos/ ,我只能说这是 ...
- 【转】python中的正斜杠、反斜杠
原文地址:http://www.cnblogs.com/followyourheart1990/p/4270566.html 首先,"/"左倾斜是正斜杠,"\" ...
随机推荐
- vue 兄弟组件的传值
handleLetterClick方法,采用emit 传递给父组件 父组件触发的方法: handleLetterChange方法: 父组件传递给子组件: CityList组件: 兄弟组件的传值可以 ...
- delphi 第4课
try 语句;(正常)except 语句; (意外处理部分) end: 例子: begin sum:=; try n:=strtoint(edit1.Text); except showMessage ...
- Windows dir
显示目录中的文件和子目录列表. DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N] [/O[[:]so ...
- 【转载】浅谈Linux内存管理机制
经常遇到一些刚接触Linux的新手会问内存占用怎么那么多? 在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然.这是Linux内存管理的一个优秀特性,在 ...
- hadoop Datanode多目录配置
1. DataNode也可以配置成多个目录,每个目录存储的数据不一样.即:数据不是副本2.具体配置如下 hdfs-site.xml <property> <name>dfs.d ...
- 谈谈域名DNS的缓存问题
可以从很多地方看到,许多刚开始做站的朋友,对域名设置方面的知识原理一知半解,以至于为了某些测试需要,经常对域名解析大动干戈.今天改个A记录,明天又换个NS.又或者,在迁移域名,迁移网站的时候的时候由于 ...
- VS2010-MFC(MFC常用类:CFile文件操作类)
转自:http://www.jizhuomi.com/software/234.html CFile类概述 如果你学过C语言,应该知道文件操作使用的是文件指针,通过文件指针实现对它指向的文件的各种操作 ...
- Mysql配置innodb_flush_log_at_trx_commit
当innodb_flush_log_at_trx_commit被 设置为0,日志缓冲每秒一次地被写到日志文件,并且对日志文件做到磁盘操作的刷新,但是在一个事务提交不做任何操作.当这个值为1(默认值)之 ...
- 一个小村庄的烦恼(netty-nio)
背景:一座大山有个小村庄,住着几百户人家,隔着大山那边几十里山路,有个小集市,家家户户经常翻山越岭买日用品,苦不堪言(同步阻塞,单线程,每户人家一个线程,去赶集了,今天也干不了别的活). 后来村长看着 ...
- .NET中DataTable的常用操作
一.目的 在各种.NET开发中,DataTable都是一个非常常见且重要的类型,在与数据打交道的过程中可以说是必不可少的对象. 它功能强大,属性与功能也是相当丰富,用好的话,使我们在处理数据时,减少很 ...