LeetCode 558. Logical OR of Two Binary Grids Represented as Quad-Trees

LeetCode 558

看到题目之后,想到一个直接的方法是,把4叉树转换会N grid,然后做完或之后,转会4叉树。但是这样做也比较麻烦。
考虑直接在4叉树上做或的操作,考虑第一层,可能的情况是,

  1. 两个都是叶子节点,那么我们可以直接做或操作得到结果
  2. 一个是叶子节点,另外一个不是,叶子节点的值如果是1,那么最后结果应该都是1, 叶子节点是0,那么最后结果应该等于另外一个节点
  3. 如果两个都不是叶子节点,那么可以递归求解出来四个叶子节点的结果。最后看看是否需要聚合成一个叶子节点。
    这样的话看上去递归就可以求解。
    def intersect(self, quadTree1: Node, quadTree2: Node) -> Node:

        def dfs(qt1:Node, qt2:Node)->Node:
            if qt1 == None and qt2 == None: return None
            if qt1.isLeaf == 1 and qt2.isLeaf == 1:
                qt1.val = qt1.val | qt2.val
                return qt1
            elif qt1.isLeaf == 1 and qt2.isLeaf == 0:
                return qt1 if qt1.val == 1 else qt2
            elif qt2.isLeaf == 1 and qt1.isLeaf == 0:
                return qt2 if qt2.val == 1 else qt1
            else:
                result = Node(0, 0, None, None, None, None)    
                result.topLeft = dfs(qt1.topLeft, qt2.topLeft)
                result.topRight = dfs(qt1.topRight, qt2.topRight)
                result.bottomLeft = dfs(qt1.bottomLeft, qt2.bottomLeft)
                result.bottomRight = dfs(qt1.bottomRight, qt2.bottomRight)

                if (result.topLeft.val == result.topRight.val == result.bottomLeft.val == result.bottomRight.val and 
                    result.topLeft.isLeaf == result.topRight.isLeaf == result.bottomLeft.isLeaf == result.bottomRight.isLeaf == 1):
                    return Node(result.topLeft.val, 1, None, None, None, None)

                return result

        return dfs(quadTree1, quadTree2)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值