菜鸟扣代码第三天:leetcode223--矩形面积

题目描述:

在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。

每个矩形由其左下顶点和右上顶点坐标表示,如图所示。

在这里插入图片描述

示例:

输入: -3, 0, 3, 4, 0, -1, 9, 2
输出: 45
说明: 假设矩形面积不会超出 int 的范围。

解题思路:

求两个矩形构成的不规则图形的总面积,分为两种情况:1、两个矩形无相交部分;2、两个矩形有相交部分。一共只有两种情况,只需要用一个if…else即可实现。无相交部分时直接把两个矩形面积加起来即可,有相交部分时需要把两个矩形面积加起来之后再减去重叠部分面积。计算两个矩形相交部分的面积算是本题的较难的一部分,可以这样想:把min(min(矩形甲的右上横坐标减去矩形乙的左下横坐标,矩形乙的右上横坐标减去矩形甲的左下横坐标),min(矩形甲的右上横坐标减去矩形甲的左下横坐标,矩形乙的右上横坐标减去矩形乙的左下横坐标))作为相交矩形的一条边,同理求出相交矩形的另一边,从而求得相交部分的面积。

代码:

class Solution:
    def computeArea(self, A, B, 
                          C, D, 
                          E, F,
                          G, H):
        if C <= E or H <= B or G <= A or D <= F:
            return (C-A)*(D-B)+(G-E)*(H-F)
        else:
            return (C-A)*(D-B)+(G-E)*(H-F)-min(min(C-E, G-A), min(C-A, G-E))*min(min(H-B, D-F), min(D-B, H-F))

猜你喜欢

转载自blog.csdn.net/weixin_51239526/article/details/108987755