leetcode756. 金字塔转换矩阵(python实现)

96 篇文章 1 订阅
81 篇文章 1 订阅

现在,我们用一些方块来堆砌一个金字塔。 每个方块用仅包含一个字母的字符串表示,例如 “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’) 三种规则。

代码

class Solution(object):
    def pyramidTransition(self, bottom, allowed):
        map = {}
        for allo in allowed:
            key = allo[0:2]
            val = allo[2]
            if map.has_key(key):
                map[key].add(val)
            else:
                list = set()
                list.add(val)
                map[key] = list
        if len(map) == 0:
            return False

        def pyramid(bottom):
            lis = []
            lis .append("")
            for i in range(1, len(bottom)):
                if map.has_key(bottom[i - 1: i + 1]):
                    vals = map[bottom[i - 1: i + 1]]
                    liss = []
                    for l in lis:
                        for v in vals:
                            liss.append(l + v)
                    lis = liss
                else:
                    return False
            for l in lis:
                if len(l) == 1:
                    return True
                if pyramid(l):
                    return True
            return False

        return pyramid(bottom)

题目本身没什么好讲的,也计算先找出倒数第二层的所有情况,一直找到最顶层
python语法dict类似java中的map
map = {}
和python中list不同的是,直接就可以用和赋值
python中好像所有的长度都可以使用len(object)来获得

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值