力扣959. 由斜杠划分区域

news2024/12/23 18:47:19

题目描述:

在由 1 x 1 方格组成的 n x n 网格 grid 中,每个 1 x 1 方块由 '/''\'空格构成。这些字符会将方块划分为一些共边的区域。

给定网格 grid 表示为一个字符串数组,返回 区域的数量 。

请注意,反斜杠字符是转义的,因此 '\''\\' 表示。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这题我看了一个题解,就是把每一个1x1的小方格还要分成上下左右四个三角形块,给这些三角形编上编号后,通过并查集,把需要合并的块变成连通块,最后计算连通块的个数,也就是区域个数。

具体代码如下:

class Solution {
public:
    int Find(vector<int>& f,int x){
        if(f[x] != x){
            f[x] = Find(f,f[x]);
        }
        return f[x];
    }

    void Union(vector<int>& f,int index1,int index2){
        f[Find(f, index1)] = Find(f, index2);
    }

    int regionsBySlashes(vector<string>& grid) {
        int n = grid.size();
        vector<int> f(n*n*4);
        for(int i = 0;i<n*n*4;i++){
            f[i] = i;
        }
		
		// 假设n=2,那么大的方格按左上角、右上角、左下角、右下角分成四个小方格,
		// 这四个小方格的idx分别是 0、1、2、3
        for(int i = 0;i<n;i++){
            for(int j = 0;j<n;j++){
                int idx = i*n+j;
                if(i<n-1){
                	// 无论是‘/’还是‘\\',一个小方格中最底下的三角形
                	//和挨在下面的小方格的最上面的三角形一定是会合并在一起的
                    int bottom = idx + n;
                    Union(f, idx*4+2, bottom*4);
                }
                if(j<n-1){
                	// 同理,无论是‘/’还是‘\\',一个小方格中最右边的三角形
                	//和挨在右边的小方格的最左边的三角形一定是会合并在一起的
                    int right = idx+1;
                    Union(f, idx*4+1, right*4+3);
                }
                // 其余的小三角形块是否合并就根据 左斜杠、右斜杠、空格来决定 
                if(grid[i][j] == '/'){
                    Union(f, idx*4, idx*4+3);
                    Union(f, idx*4+1, idx*4+2);
                }else if(grid[i][j] == '\\'){
                    Union(f, idx*4, idx*4+1);
                    Union(f, idx*4+2, idx*4+3);
                }else {
                    Union(f, idx*4, idx*4+1);
                    Union(f, idx*4+1, idx*4+2);
                    Union(f, idx*4+2, idx*4+3);
                }
            }
        }

        int count = 0;
        for(int i = 0;i<n*n*4;i++){
            if(f[i]==i) count++;
        }

        return count;
    }
};

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/797410.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

乐维监控 | 如何快速关闭网络设备所有端口

在运维监控实践中&#xff0c;由于不同的运维人员可能会关注不同的监控指标&#xff0c;因此乐维监控在监控网络设备时&#xff0c;会默认开启所有的端口&#xff0c;尽可能多的覆盖监控指标&#xff0c;避免遗漏重要指标。但是&#xff0c;这样又会带来新的问题&#xff0c;在…

ITIL4—服务管理的四个维度

服务管理的四个维度 上一章概述了对服务管理至关重要的概念。一个组织的目标是为其利益相关者创造价值&#xff0c;这是通过提供和消费服务来实现的。ITIL SVS描述了组织的各个组成部分协同工作创造该价值的方式。但是&#xff0c;在进一步探讨之前&#xff0c;必须首先介绍服…

嵌入式工程师有发展前途吗?

如果你是真的喜欢嵌入式&#xff0c;那鼓励你顺从内心指引。毕竟人生不仅仅是向钱看的。根据马斯洛需求模型&#xff0c;在物质条件基本满足后就会进而强调精神需求&#xff0c;当然现今消费主义社会&#xff0c;你可以选择砸钱下猛药感官刺激来安抚虚无的内心&#xff0c;但这…

麒麟信安携手航天紫光发布 “自主操作系统+国产数据库”联合解决方案

数据库是计算、存储和管理数据信息的重要“仓库”&#xff0c;国产操作系统则为各项业务系统的运行提供安全可靠的底座支撑&#xff0c;操作系统、数据库等基础软件实现自主可控&#xff0c;对于我国信息安全和数字经济发展具有重要意义。为满足当前各大行业用户海量数据高并发…

OBS直播如何实现竖屏直播(OBS配置竖屏直播)

OBS直播如何实现竖屏直播&#xff08;OBS配置竖屏直播&#xff09; 第1步&#xff1a;安装好OBS直播软件&#xff1b; 第2步&#xff1a;打开OBS&#xff0c;点击右下角“设置 --> 视频” 》配置 竖屏直播的分辨率&#xff0c;比如900x1600、1080x1920的分辨率&#xff1b;…

Vue2.0 使用 echarts

目录 1. 配置 渲染2. 数据渲染 1. 配置 渲染 安装 echarts 依赖 npm install echarts -Smain.js&#xff0c;引入 echarts import * as echarts from echarts// 在import的后面&#xff0c;echarts的前面加一个 * as Vue.prototype.$echarts echarts从 echarts 官网直接复制…

【学习笔记】目标跟踪领域SOTA方法比较

目录 前言方法1 TraDeS:2 FairMOT:3 SMILEtrack:4 ByteTrack: 前言 常用于行人跟踪的多目标跟踪数据集包括&#xff1a;MOT 15/16/17/20、PersonPath22等… 为更好比较现有SOTA算法的检测性能&#xff0c;本博客将针对在各数据集上表现较优的算法模型进行介绍。&#xff08;表…

hive删除数据进行恢复

在实际开发或生产中&#xff0c;hive表如果被误删&#xff0c;如被truncate或是分区表的分区被误删了&#xff0c;只要在回收站的清空周期内&#xff0c;是可以恢复数据的&#xff0c;步骤如下&#xff1a; &#xff08;1&#xff09; 先找到被删除数据的存放目录&#xff0c;…

MQ公共特性介绍 (ActiveMQ, RabbitMQ, RocketMQ, Kafka对比)

本章介绍 本文主要介绍所有MQ框架都具备的公共特点&#xff0c;同时对比了一些目前比较主流MQ框架的优缺点&#xff0c;给大家做技术选型作参考。 文章目录 本章介绍MQ介绍适用场景异步通信案例一案例二 系统解耦削峰填谷广播通信总结 缺点MQ对比APQP历史AMQP是什么 MQ介绍 M…

Python数据分析实战-dataframe筛选某字段包含(模糊匹配)某些值的记录(附源码和实现效果)

实现功能 Python利用df[].str.contains()对dataframe筛选某字段包含&#xff08;模糊匹配&#xff09;某些值的记录 实现代码 import pandas as pddf {地址:[北京,上海,长沙,北京省会,广州市区],table:[user,student,course,sc,book]} df pd.DataFrame(df) print(df) print…

【小白必看】使用Python批量下载英雄联盟皮肤图片的技术实现

文章目录 前言运行效果截图导入必要的模块和库定义常量和变量获取所有英雄的名称遍历每个英雄遍历每个英雄的皮肤完整代码结束语 前言 英雄联盟是一款备受喜爱的团队对战游戏&#xff0c;游戏中每位英雄都有各种精美的皮肤供玩家选择。本文将介绍一个使用Python编写的英雄联盟皮…

计数型信号量

回顾上节所讲&#xff1a; Q: 什么是信号量&#xff1f; A: 信号量&#xff08;Semaphore&#xff09;&#xff0c;是在多任务环境下使用的一种机制&#xff0c;是可以用来保证两个或多个关键代码段不被并发调用。 信号量这个名字&#xff0c;我们可以把它拆分来看&#xff0c;…

本地Git仓库和GitHub仓库SSH传输

SSH创建命令解释 ssh-keygen 用于创建密钥的程序 -m PEM 将密钥的格式设为 PEM -t rsa 要创建的密钥类型&#xff0c;本例中为 RSA 格式 -b 4096 密钥的位数&#xff0c;本例中为 4096 -C “azureusermyserver” 追加到公钥文件末尾以便于识别的注释。 通常以电子邮件地址…

【Android常见问题(五)】- Flutter项目性能优化

文章目录 知识回顾前言源码分析1. 渲染过程2. 分析工具3. 优化方法合理使用const关键词合理使用组件管理着色器编译垃圾 知识回顾 前言 项目迭代开发一定程度后&#xff0c;性能优化是重中之重&#xff0c;其中包括了包体积&#xff0c;UI 渲染、交互等多个方面。 通过 Flutt…

ssm停车场信息管理系统java车辆车位收费jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当做编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 ssm停车场信息管理系统 系统有2权限&#xff1a;管理…

浏览器端代理proxy 解决跨域

一.环境:使用expresshttp-proxy-middleware 直接上代码 // include dependencies const express require( express);//node内置的path模块导入 const path require("path")const { createProxyMiddleware } require( http-proxy-middleware); // 需要代理后端服…

Linux6.12 Docker 数据管理和镜像的创建

文章目录 计算机系统5G云计算第四章 LINUX Docker 数据管理和镜像的创建一、Docker 的数据管理1.数据卷2.数据卷容器 二、容器互联&#xff08;使用centos镜像&#xff09;三、Docker 镜像的创建1.基于现有镜像创建1&#xff09;首先启动一个镜像&#xff0c;在容器里做修改2&a…

通达信指标回测系统的高级玩法:优化参数

#1.本期主要的学习内容&#xff1a; A.找到最优的选股信号&#xff0c;即最佳参数的寻找方法。 B.学会使用通达信内置的&#xff08;程序交易评测系统&#xff09;指标回测系统。 #2.程序交易评测系统的打开方法 选择公式——程序交易评测系统 快捷键&#xff1a;CTRLS 键…

了解Unity编辑器之组件篇Event(七)

Event&#xff1a;用于在对象之间进行通信和交互的机制。它可以帮助你实现触发和响应特定动作或状态的逻辑一、Event System&#xff1a;用于处理 UI 事件的系统组件 First Selected 属性&#xff1a;定义了在场景加载或 UI 激活时&#xff0c;哪个 UI 元素将成为首选的选中元素…

动态内存管理学习分享

动态内存管理学习分享 1. 为什么存在动态内存分配2. 动态内存函数的介绍2.1 [malloc](https://legacy.cplusplus.com/reference/cstdlib/malloc/?kwmalloc)和[free](https://legacy.cplusplus.com/reference/cstdlib/free/?kwfree)2.1.1 实例 2.2 [calloc](https://legacy.cp…