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);
	}
};
相关推荐
云栖梦泽7 分钟前
Linux内核与驱动:14.SPI子系统
linux·运维·服务器·c++
Gary Studio14 分钟前
安卓HAL C++基础-智能指针
开发语言·c++
还是阿落呀24 分钟前
基本控制结构2
c++
多思考少编码1 小时前
PAT甲级真题1001 - 1005题详细题解(C++)(个人题解)
c++·python·最短路·pat·算法竞赛
极客智造2 小时前
C++ 标准 IO 流全详解:cin /cout/get /getline 原理、用法、区别与避坑
c++·io
charlie1145141912 小时前
嵌入式C++工程实践第20篇:GPIO 输入模式内部电路 —— 芯片是如何“听“到外部信号的
开发语言·c++·stm32·单片机
样例过了就是过了4 小时前
LeetCode热题100 分割等和子集
数据结构·c++·算法·leetcode·动态规划
麦兜和小可的舅舅5 小时前
ClickHouse 列管理机制解析:从 COW、IColumn 到 CRTP
c++·clickhouse
旖-旎5 小时前
深搜练习(组合)(5)
c++·算法·深度优先·力扣
vegetablesssss5 小时前
vtk镜像图
c++·qt·vtk