959. Regions Cut By Slashes(Leetcode每日一题-2021.01.25)--抄答案

2024-01-04 17:58

本文主要是介绍959. Regions Cut By Slashes(Leetcode每日一题-2021.01.25)--抄答案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Problem

In a N x N grid composed of 1 x 1 squares, each 1 x 1 square consists of a /, , or blank space. These characters divide the square into contiguous regions.

(Note that backslash characters are escaped, so a \ is represented as “\”.)

Return the number of regions.

Note:

  • 1 <= grid.length == grid[0].length <= 30
  • grid[i][j] is either ‘/’, ‘’, or ’ ’

Example1

在这里插入图片描述

Example2

在这里插入图片描述

Example3

在这里插入图片描述

Example4

在这里插入图片描述

Example5

在这里插入图片描述

Solution

// 模板2,维护连通分量的并查集格式
class UnionFind{vector<int> parent;int count;
public:// 初始化UnionFind(int n):parent(vector<int>(n)),count(n){for(int i = 0;i < n;i++){parent[i] = i;}}int getcount(){return count;}// 查找操作int Find(int x){if(parent[x] != x)parent[x] = Find(parent[x]);return parent[x];}// 合并操作,才需要对连通分量进行递减,注意要先判断相同的就不用递减void Union(int x,int y){int rootx = Find(x);int rooty = Find(y);if(rootx == rooty){return;}parent[rootx] = rooty;count--;}
};
class Solution {
public://方法一:并查集思路,将小单元格划分为0、1、2、3区域,并查集遇到/合并03,12,遇到\合并01、23,空格合并全部// 单元格之间的合并是向右或向下扫描相邻的区域,需要维护并查集的连通分量个数4*N*Nint regionsBySlashes(vector<string>& grid) {int N = grid.size();int size = 4*N*N;UnionFind uf(size);for(int i = 0;i < N;i++){vector<char> row(grid[i].begin(),grid[i].end());for(int j = 0;j < N;j++){// 二维网格转化为一维表格公式int index = 4 * (i * N + j);char c = row[j];// 单元格内的合并if(c == '/'){// 合并0、3,合并1、2uf.Union(index,index+3);uf.Union(index+1,index+2);}else if(c == '\\'){// 合并0、1,合并2、3uf.Union(index,index+1);uf.Union(index+2,index+3);}else{uf.Union(index,index+1);uf.Union(index+1,index+2);uf.Union(index+2,index+3);}// 单元格间的合并// 向右边合并1(当前):3(右一列)if(j + 1 < N)uf.Union(index+1,4 * (i * N + j + 1) + 3);// 向下边合并2(当前):0(下一行)if(i + 1 < N)uf.Union(index+2,4 * ((i + 1) * N + j));}}return uf.getcount();}
};
//https://leetcode-cn.com/problems/regions-cut-by-slashes/solution/you-xie-gang-hua-fen-qu-yu-by-leetcode-67xb/

这篇关于959. Regions Cut By Slashes(Leetcode每日一题-2021.01.25)--抄答案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/570128

相关文章

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

poj 3104 二分答案

题意: n件湿度为num的衣服,每秒钟自己可以蒸发掉1个湿度。 然而如果使用了暖炉,每秒可以烧掉k个湿度,但不计算蒸发了。 现在问这么多的衣服,怎么烧事件最短。 解析: 二分答案咯。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <c

leetcode-24Swap Nodes in Pairs

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode swapPairs(L

leetcode-23Merge k Sorted Lists

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode mergeKLists

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

【JavaScript】LeetCode:16-20

文章目录 16 无重复字符的最长字串17 找到字符串中所有字母异位词18 和为K的子数组19 滑动窗口最大值20 最小覆盖字串 16 无重复字符的最长字串 滑动窗口 + 哈希表这里用哈希集合Set()实现。左指针i,右指针j,从头遍历数组,若j指针指向的元素不在set中,则加入该元素,否则更新结果res,删除集合中i指针指向的元素,进入下一轮循环。 /*** @param

每日一练7:简写单词(含链接)

1.链接 简写单词_牛客题霸_牛客网 2.题目 3.代码1(错误经验) #include <iostream>#include <string>using namespace std;int main() {string s;string ret;int count = 0;while(cin >> s)for(auto a : s){if(count == 0){if( a <=