-
题目链接 https://leetcode-cn.com/problems/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 × 1的小方块 分成四个小三角形。是我们进行处理的最小单位。当小方块为 ;'\'时,合并0和2,1和3,当方块为 ‘/’时合并0和1,2和3。当小方块为‘ ’ 是四个都合并。
- 图片来自于 https://blog.youkuaiyun.com/weixin_44482648/article/details/86677819
-
代码
- python
class Solution: def regionsBySlashes(self, grid): if not grid: return 0 N = len(grid) u = [i for i in range(4 * N * N)] print(u) res = 4 * N * N def _find(a): while u[a] != a: a = u[a] return a def _union(a, b): nonlocal u, res a, b = _find(a), _find(b) u[a] = b res -= a != b for i in range(N): for j in range(N): index = 4 * (i * N + j) #print(index) if grid[i][j] == ' ': # 四个小方块都联通 _union(index, index + 1) _union(index + 1, index + 2) _union(index + 2, index + 3) elif grid[i][j] == '\\': # 联通 0和1 以及 2和3 _union(index, index + 1) _union(index + 2, index + 3) else: # 联通 0和3以及 1和2 _union(index, index + 3) _union(index + 1, index + 2) if j != N-1: _union(index + 1, index + 7) if i != N-1: _union(index + 2, index + 4 * N) return res
- python
leetcode 959. 由斜杠划分区域
最新推荐文章于 2025-06-14 18:42:24 发布