LeetCode每日一题,959. Regions Cut By Slashes
先看题目描述
大意就是给定一个 N * N 的网格,网格会被斜杠或反斜杠给划分成不同的区域,让我们返回区域的个数
算法和思路
并查集
看到这题,我们很容易就想到可以使用并查集来求连通分量的个数
斜杠、反斜杠把单元格拆分成两个三角形的形态,在做合并的时候需要分类讨论。根据斜杠与反斜杠分割的特点,我们把一个单元格分成逻辑上的四部分,如下所示:
我们需要遍历一次输入的二维网格 grid,在单元格内和单元格间进行合并
接下来我们考虑在单元格内和单元格间合并的情况
单元格内合并:
- 若此时该单元格内是 “/“,则将 0、3 合并,1、2 合并
- 若此时单元格内是 “\\“,则将 0、1 合并,2、3 合并
- 若单元格内为空,则直接 0、1、2、3 一起合并
单元格间合并:
单元格间的合并就考虑将每个单元格向右和向下合并,即将当前单元格的 1 和右边单元格的 3 合并,当前单元格的 2 和下方单元格的 0 合并,如下图所示
合并完成以后,返回连通分量的个数即可,连通分量的个数就是划分区域的个数
算法源码
并查集
1 | class Solution { |