756. 金字塔转换矩阵
题目链接:756. 金字塔转换矩阵
代码如下:
classSolution{public:boolpyramidTransition(string bottom,vector<string>&allowed){string groups[6][6]{};//三角形底部两个字母-》[三角形顶部字母]for(auto&s:allowed){groups[s[0]-'A'][s[1]-'A']+=s[2];}intn=bottom.size();vector<string>pyramid(n);for(inti=0;i<n;i++){pyramid[i].resize(i+1);}pyramid[n-1]=move(bottom);//现在准备填[i,j]//返回继续填能否填完所有格子(从下往上填,每行从左到右填)autodfs=[&](auto&&dfs,inti,intj)->bool{if(i<0){//所有格子都已填完returntrue;}if(j==i+1){//i行已填完returndfs(dfs,i-1,0);//开始填i-1行}//枚举(i,j)填什么字母//这取决于(i+1,j)和(i+1,j+1)填的字母for(chartop:groups[pyramid[i+1][j]-'A'][pyramid[i+1][j+1]-'A']){pyramid[i][j]=top;if(dfs(dfs,i,j+1)){returntrue;}}returnfalse;};//倒数第二行开始填returndfs(dfs,n-2,0);}};