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);
	}
};
相关推荐
czy87874758 小时前
深入了解 C++ 中的 `std::bind` 函数
开发语言·c++
我在人间贩卖青春8 小时前
C++之继承的方式
c++·private·public·protected·继承方式
智者知已应修善业9 小时前
【洛谷P9975奶牛被病毒传染最少数量推导,导出多样例】2025-2-26
c语言·c++·经验分享·笔记·算法·推荐算法
Trouvaille ~9 小时前
【Linux】应用层协议设计实战(一):自定义协议与网络计算器
linux·运维·服务器·网络·c++·http·应用层协议
CSCN新手听安10 小时前
【linux】高级IO,I/O多路转接之poll,接口和原理讲解,poll版本的TCP服务器
linux·运维·服务器·c++·计算机网络·高级io·poll
CSCN新手听安10 小时前
【linux】网络基础(三)TCP服务端网络版本计算器的优化,Json的使用,服务器守护进程化daemon,重谈OSI七层模型
linux·服务器·网络·c++·tcp/ip·json
m0_7369191010 小时前
C++中的委托构造函数
开发语言·c++·算法
小小小小王王王10 小时前
洛谷-P1886 【模板】单调队列 / 滑动窗口
c++·算法
历程里程碑10 小时前
Linux 库
java·linux·运维·服务器·数据结构·c++·算法
Sheep Shaun10 小时前
如何让一个进程诞生、工作、终止并等待回收?——探索Linux进程控制与Shell的诞生
linux·服务器·数据结构·c++·算法·shell·进程控制