在由 1 x 1 方格组成的 N x N 网格 grid
中,每个 1 x 1 方块由 /
、\
或空格构成。这些字符会将方块划分为一些共边的区域。
(请注意,反斜杠字符是转义的,因此 \
用 "\\"
表示。)。
返回区域的数目。
示例 1:
输入:
[
" /",
"/ "
]
输出:2
解释:2x2 网格如下:
![](https://i-blog.csdnimg.cn/blog_migrate/f7dca8ff5b023a3ecd57873e280c571d.png)
示例 2:
输入:
[
" /",
" "
]
输出:1
解释:2x2 网格如下:
![](https://i-blog.csdnimg.cn/blog_migrate/03463b9ecff4a22291eba031bdc5a6a4.png)
示例 3:
输入:
[
"\\/",
"/\\"
]
输出:4
解释:(回想一下,因为 \ 字符是转义的,所以 "\\/" 表示 \/,而 "/\\" 表示 /\。)
2x2 网格如下:
![](https://i-blog.csdnimg.cn/blog_migrate/a974d2a420be8a91b65688ba2a06ffbd.png)
示例 4:
输入:
[
"/\\",
"\\/"
]
输出:5
解释:(回想一下,因为 \ 字符是转义的,所以 "/\\" 表示 /\,而 "\\/" 表示 \/。)
2x2 网格如下:
![](https://i-blog.csdnimg.cn/blog_migrate/8c2c5a9877a82c90bf6940a4d77280cb.png)
示例 5:
输入:
[
"//",
"/ "
]
输出:3
解释:2x2 网格如下:
![](https://i-blog.csdnimg.cn/blog_migrate/b90d70f28bfe690bcc3d6e41870533dc.png)
提示:
1 <= grid.length == grid[0].length <= 30
grid[i][j]
是'/'
、'\'
、或' '
。
解题思路
这个问题非常有意思,这实际是一个岛屿个数的问题,所以不难想到通过DFS
来做。
![](https://i-blog.csdnimg.cn/blog_migrate/b23811356ed87d71f558fdcdf8accbdf.png)
这里我们使用3×3个像素表示一个最小单元最为合适。
class Solution:
def regionsBySlashes(self, grid):
"""
:type grid: List[str]
:rtype: int
"""
grid_len = len(grid)
g_len = grid_len*3
g = [[0]*g_len for _ in range(g_len)]
def dfs(g, i, j):
if i >= 0 and j >= 0 and i