227 金字塔轉換矩陣

2021-09-27 02:23:29 字數 1756 閱讀 8994

題目描述:

現在,我們用一些方塊來堆砌乙個金字塔。 每個方塊用僅包含乙個字母的字串表示,例如 「z」。

使用三元組表示金字塔的堆砌規則如下:

(a, b, c) 表示,「c」為頂層方塊,方塊「a」、「b」分別作為方塊「c」下一層的的左、右子塊。當且僅當(a, b, c)是被允許的三元組,我們才可以將其堆砌上。

初始時,給定金字塔的基層 bottom,用乙個字串表示。乙個允許的三元組列表 allowed,每個三元組用乙個長度為 3 的字串表示。

如果可以由基層一直堆到塔尖返回true,否則返回false。

示例 1:

輸入: bottom = 「xyz」, allowed = [「xyd」, 「yze」, 「dea」, 「fff」]

輸出: true

解析:可以堆砌成這樣的金字塔:a/

d e/ \ /

x y z

因為符合(『x』, 『y』, 『d』), (『y』, 『z』, 『e』) 和 (『d』, 『e』, 『a』) 三種規則。

示例 2:

輸入: bottom = 「xxyx」, allowed = [「***」, 「xxy」, 「xyx」, 「xyy」, 「yxz」]

輸出: false

解析:無法一直堆到塔尖。

注意, 允許存在三元組(a, b, c)和 (a, b, d) ,其中 c != d.

注意:bottom 的長度範圍在 [2, 8]。

allowed 的長度範圍在[0, 200]。

方塊的標記字母範圍為。

遞迴+回溯+dfs

使用map儲存

class solution 

return dfs(bottom);

}private boolean dfs(string bottom)

private void generateupper(string bottom, listcandidates, stringbuilder sb, int st)

for(character c : map.get(bottom.substring(st, st+2)))

}}

自己嘗試實現一遍

class solution 

map.get(tem).add(string.charat(2));

} return dfs1(bottom);

}// 獲取到所有的可能的底層

public boolean dfs1(string botom)

for (int i = 0; i < botom.length() - 1; ++i)

if (!map.containskey(botom.substring(i, i + 2)))

return false;

// 獲取到所有的上層建築

listlist = new arraylist<>();

getupper(list, botom, 0, new stringbuilder());

for (string string : list)

} return false;

} public void getupper(listlist,string botom,int index,stringbuilder sb)

for (character temchar : map.get(botom.substring(index,index + 2)))

}}

leetcode 756 金字塔轉換矩陣

現在,我們用一些方塊來堆砌乙個金字塔。每個方塊用僅包含乙個字母的字串表示,例如 z 使用三元組表示金字塔的堆砌規則如下 a,b,c 表示,c 為頂層方塊,方塊 a b 分別作為方塊 c 下一層的的左 右子塊。當且僅當 a,b,c 是被允許的三元組,我們才可以將其堆砌上。初始時,給定金字塔的基層bot...

python 金字塔 Python金字塔

托倫,函式中有幾個小錯誤和乙個邏輯問題print y to a 請注意,此函式生成乙個以z開頭的字串,但您希望將字串以相反的方向連線,而您的另乙個函式print a to y 確實停止了 1位置 例如 還要注意,您需要新增新行字元 n 以獲得一些不錯的輸出。在 我的解決方案是 def print a...

字母金字塔(類同數字金字塔)

問題描述 讓程式要求使用者輸入乙個大寫字母,使用巢狀迴圈產生像下面這樣的金字塔圖案 aaba abcba abcdba abcdecba 演算法分析 每行包括三個部分內容 若干個空格 正序排列的字母 倒序排列的字幕。使用乙個外部迴圈來處理行,在每乙個行中使用三個內部迴圈 乙個處理空格,乙個以公升序列...