756. 金字塔转换矩阵

756. 金字塔转换矩阵


题目链接:756. 金字塔转换矩阵

代码如下:

cpp 复制代码
class Solution {
public:
	bool pyramidTransition(string bottom, vector<string>& allowed) {
		string groups[6][6]{};//三角形底部两个字母-》[三角形顶部字母]
		for (auto& s : allowed) {
			groups[s[0] - 'A'][s[1] - 'A'] += s[2];
		}

		int n = bottom.size();
		vector<string> pyramid(n);
		for (int i = 0;i < n;i++) {
			pyramid[i].resize(i + 1);
		}
		pyramid[n - 1] = move(bottom);
		
		//现在准备填[i,j]
		//返回继续填能否填完所有格子(从下往上填,每行从左到右填)
		auto dfs = [&](auto&& dfs, int i, int j)->bool {
			if (i < 0) { //所有格子都已填完
				return true;
			}

			if (j == i + 1) { //i行已填完
				return dfs(dfs,i - 1, 0); //开始填i-1行
			}

			//枚举(i,j)填什么字母
			//这取决于(i+1,j)和(i+1,j+1)填的字母
			for (char top : groups[pyramid[i + 1][j] - 'A'][pyramid[i + 1][j + 1] - 'A']) {
				pyramid[i][j] = top;
				if (dfs(dfs,i, j + 1)) {
					return true;
				}
			}
			return false;
		};

		//倒数第二行开始填
		return dfs(dfs, n - 2, 0);
	}
};
相关推荐
优雅的潮叭1 天前
c++ 学习笔记之 chrono库
c++·笔记·学习
星火开发设计1 天前
C++ 数组:一维数组的定义、遍历与常见操作
java·开发语言·数据结构·c++·学习·数组·知识
月挽清风1 天前
代码随想录第七天:
数据结构·c++·算法
点云SLAM1 天前
C++内存泄漏检测之Windows 专用工具(CRT Debug、Dr.Memory)和Linux 专业工具(ASan 、heaptrack)
linux·c++·windows·asan·dr.memory·c++内存泄漏检测·c++内存管理
浅念-1 天前
C语言小知识——指针(3)
c语言·开发语言·c++·经验分享·笔记·学习·算法
无限进步_1 天前
【C++】大数相加算法详解:从字符串加法到内存布局的思考
开发语言·c++·windows·git·算法·github·visual studio
C+-C资深大佬1 天前
C++ 数据类型转换是如何实现的?
开发语言·c++·算法
oioihoii1 天前
回归测试:软件演进中的质量守护神与实践全指南
c++
十五年专注C++开发1 天前
CMake基础: 在release模式下生成调试信息的方法
linux·c++·windows·cmake·跨平台构建
点云SLAM1 天前
C++(C++17/20)最佳工厂写法和SLAM应用综合示例
开发语言·c++·设计模式·c++实战·注册工厂模式·c++大工程系统