题目描述:
现在,我们用一些方块来堆砌一个金字塔。 每个方块用仅包含一个字母的字符串表示。
使用三元组表示金字塔的堆砌规则如下:
对于三元组(A, B, C) ,“C”为顶层方块,方块“A”、“B”分别作为方块“C”下一层的的左、右子块。当且仅当(A, B, C)是被允许的三元组,我们才可以将其堆砌上。
初始时,给定金字塔的基层 bottom,用一个字符串表示。一个允许的三元组列表 allowed,每个三元组用一个长度为 3 的字符串表示。
如果可以由基层一直堆到塔尖就返回 true ,否则返回 false 。

示例 1:
输入:bottom = “BCD”, allowed = [“BCG”, “CDE”, “GEA”, “FFF”]
输出:true
解析:
可以堆砌成这样的金字塔:

因为符合(‘B’, ‘C’, ‘G’), (‘C’, ‘D’, ‘E’) 和 (‘G’, ‘E’, ‘A’) 三种规则。

示例 2:
输入:bottom = “AABA”, allowed = [“AAA”, “AAB”, “ABA”, “ABB”, “BAC”]
输出:false
解析:
无法一直堆到塔尖。
注意, 允许存在像 (A, B, C) 和 (A, B, D) 这样的三元组,其中 C != D。

提示:
bottom 的长度范围在 [2, 8]。
allowed 的长度范围在[0, 200]。
方块的标记字母范围为{‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’}。

方法1:
主要思路:解题汇总链接
(1)深度优先搜索;
(2)先将给定的字符串数组使用字符串的前两个字符组成的子串进行分类,使用unordered_map<string,vector>进行分类统计;
(3)使用深度优先搜索,每次根据当前层的元素,生成上一层的元素,当当前元素遍历结束,使用生成的上一层的元素,作为当前层,重新进行深度搜索,生成更上一层的元素;

class Solution {public:bool dfs(string& bottom,string& cur_top,unordered_map<string,vector<string>>&mp,int pos){if(bottom.size()==1){//说明已经遍历到最顶层return true;}if(pos==bottom.size()-1){//说明当前层遍历结束,可以使用生成的层,来进行更高层的判断生成string new_top;if(dfs(cur_top,new_top,mp,0)){//更高的层的判断return true;}return false;}string cur_sub=bottom.substr(pos,2);//当前层的判断的位置if(mp.count(cur_sub)==0){//说明不存在此种字符串可以添加return false;}for(string& str:mp[cur_sub]){//添加可能的字符串cur_top+=str[2];//生成更高的一层if(dfs(bottom,cur_top,mp,pos+1)){//判断当期层的下一个位置return true;}cur_top.pop_back();}return false;}bool pyramidTransition(string bottom, vector<string>& allowed) {unordered_map<string,vector<string>> mp;for(string& str:allowed){//对字符串数组中的字符串进行分类mp[str.substr(0,2)].push_back(str);}string cur_top;//存储生成的更上一侧的字符串return dfs(bottom,cur_top,mp,0);}
};

756 金字塔转换矩阵相关推荐

  1. Java实现 LeetCode 756 金字塔转换矩阵(DFS)

    756. 金字塔转换矩阵 现在,我们用一些方块来堆砌一个金字塔. 每个方块用仅包含一个字母的字符串表示. 使用三元组表示金字塔的堆砌规则如下: 对于三元组(A, B, C) ,"C" ...

  2. LeetCode 756. 金字塔转换矩阵(回溯)

    文章目录 1. 题目 2. 解题 1. 题目 现在,我们用一些方块来堆砌一个金字塔. 每个方块用仅包含一个字母的字符串表示. 使用三元组表示金字塔的堆砌规则如下: 对于三元组(A, B, C) ,&q ...

  3. leetcode 756. Pyramid Transition Matrix | 756. 金字塔转换矩阵(BFS)

    题目 https://leetcode.com/problems/pyramid-transition-matrix/ 题解 BFS,把 pattern 用 map 存起来,然后 bfs 从下向上一层 ...

  4. java 字母金字塔_LeetCode756:金字塔转换矩阵(JAVA题解)

    题目描述 现在,我们用一些方块来堆砌一个金字塔. 每个方块用仅包含一个字母的字符串表示. 使用三元组表示金字塔的堆砌规则如下: 对于三元组(A, B, C) ,"C"为顶层方块,方 ...

  5. 【数据结构与算法】之深入解析“金字塔转换矩阵”的求解思路与算法示例

    一.题目要求 你正在把积木堆成金字塔,每个块都有一个颜色,用一个字母表示,每一行的块比它下面的行少一个块,并且居中. 为了使金字塔美观,只有特定的三角形图案是允许的.一个三角形的图案由两个块和叠在上面 ...

  6. Transforms CTM, 转换矩阵

    Quartz转换实现的原理:Quartz把绘图分成两个部分, 用户空间,即和设备无关, 设备空间, 用户空间和设备空间中间存在一个转换矩阵 : CTM 本章实质是讲解CTM Quartz提供的3大功能 ...

  7. 简单递推公式转换矩阵求解

    对于许多递推题目,由于数据范围太大直接循环写会爆掉,这时首先想到的就是矩阵优化,把递推式转换成01矩阵通过快速幂优化. 比如最简单的斐波纳挈,如果n非常大,循环递推肯定是不合适的,那么可以考虑下面的公 ...

  8. C语言链表的转置算法,c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置.doc...

    c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置 #include "stdio.h" #include "malloc.h" /*typedef s ...

  9. python转移矩阵_使用Python / Numpy中的单词构建转换矩阵

    我试图用这个数据构建一个3×3转换矩阵 days=['rain', 'rain', 'rain', 'clouds', 'rain', 'sun', 'clouds', 'clouds', 'rain ...

最新文章

  1. 如何有效的准备Java面试?
  2. PHP知识点 自己做个记录
  3. Web 前端框架分类解读
  4. Python列表基础
  5. C++ 的Tool工具收集
  6. HTML wbr元素
  7. PyTorch 1.0 中文官方教程:torch.nn 到底是什么?
  8. jquery获取加载的html内容,jquery 获取ajax加载的html中部分内容
  9. php 设置多个html条件_PHP-FPM是个啥
  10. [网页设计]Ajax、Comet与Websocket--转
  11. 代码理解(2009.11.20)
  12. Android+WebServer的GPS监控系统(设想)
  13. 基于VLC的视频播放器
  14. 接口测试工具--SoapUI下载安装教程
  15. JDK各版本下载官网链接
  16. HomeBrew加速
  17. 计算机视觉技术与应用综述
  18. VCSA5.5升级6.5u1提示VUM出错和证书错误的解决办法
  19. 搜索引擎-应用篇(地理位置查询)
  20. 计算机职称证的用途,计算机软考高项过了有什么用处

热门文章

  1. 魔妆镜在电商直播中的应用
  2. 找一个有钱的男朋友是什么体验?
  3. 读书《重生,七年就是一辈子》
  4. 复杂网络系统matlab,复杂网络matlab
  5. 【DIY娱乐】手机链接PC玩体感游戏
  6. 鏖战5小时,44对1,扎克伯格被参议员怒怼,结果他坐着就赚了28亿美元
  7. 狼人杀超详入门攻略2之狼人战术
  8. python综合程序设计-实验四 Python综合实践
  9. JavaFX实现学生成绩管理系统(综合实践大作业)
  10. g楦和h楦的区别_填、堵、堵塞、塞、楦的区别_近义词词典_词林在线词典