LeetCode 金字塔轉換矩陣(深度優先搜尋)

2021-09-20 21:36:34 字數 1478 閱讀 9785

問題描述:

現在,我們用一些方塊來堆砌乙個金字塔。 每個方塊用僅包含乙個字母的字串表示,例如 「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]。

方塊的標記字母範圍為。

思路分

析:\color

思路分析

:首先我們需要知道每構造一次,bottom的長度減一,當bottom的長度 == 1時說明構造成功了。而每次構造都是按順序取出bottom中的兩個字母,確定第三個字母(『a』到『g』一共7種可能),這時我們再去判斷當前三元組是否在規則中,如果在規則中我們就繼續構造。當我們把bottom構造得到下一層nextstr,再使用nextstr構造下一層…直到bottom的大小 == 1。

class

solution

//nowstr是正在訪問的層,nextstr是正在構造的下一層,myallowed存放所有金字塔的堆砌規則

leetcode 756 金字塔轉換矩陣

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

227 金字塔轉換矩陣

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

python 金字塔 Python金字塔

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