題目描述:
現在,我們用一些方塊來堆砌乙個金字塔。 每個方塊用僅包含乙個字母的字串表示,例如 「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 演算法分析 每行包括三個部分內容 若干個空格 正序排列的字母 倒序排列的字幕。使用乙個外部迴圈來處理行,在每乙個行中使用三個內部迴圈 乙個處理空格,乙個以公升序列...