给你二维平面上两个由直线构成的 矩形,请你计算并返回两个矩形覆盖的总面积。

每个矩形由其左下顶点和右上顶点坐标表示:

  • 第一个矩形由其左下顶点(ax1, ay1)和右上顶点(ax2, ay2)定义。
  • 第二个矩形由其左下顶点(bx1, by1)和右上顶点(bx2, by2)定义。

示例 1:

输入:ax1 = -3, ay1 = 0, ax2 = 3, ay2 = 4, bx1 = 0, by1 = -1, bx2 = 9, by2 = 2
输出:45

示例 2:

输入:ax1 = -2, ay1 = -2, ax2 = 2, ay2 = 2, bx1 = -2, by1 = -2, bx2 = 2, by2 = 2
输出:16

提示:

  • -10^4 <= ax1, ay1, ax2, ay2, bx1, by1, bx2, by2 <= 10^4

1.数学
Python解答:

class Solution:
    def computeArea(self, ax1: int, ay1: int, ax2: int, ay2: int, bx1: int, by1: int, bx2: int, by2: int) -> int:
        total = (by2-by1)*(bx2-bx1)+(ay2-ay1)*(ax2-ax1)
        if (by2 <= ay1 or by1 >= ay2) or (bx1 >= ax2 or bx2 <= ax1) or (ax1 == ax2 or bx1 == bx2 or bx1 == bx2 or by1 == by2):
            return total
        dy, dx = 0, 0
        if (ay1 < by2 < ay2 and by1 < ay1):
            dy = by2-ay1
        elif (ay1 < by1 < ay2 and by2 > ay2):
            dy = ay2-by1
        elif (by1 < ay2 < by2 and ay1 < by1):
            dy = ay2-by1
        elif (by1 < ay1 < by2 and ay2 > by2):
            dy = by2-ay1
        elif (by1 >= ay1 and by2 <= ay2):
            dy = by2-by1
        elif (ay1 >= by1 and ay2 <= by2):
            dy = ay2-ay1

        if (ax1 < bx2 < ax2 and bx1 < ax1):
            dx = bx2-ax1
        elif (ax1 < bx1 < ax2 and bx2 > ax2):
            dx = ax2-bx1
        elif (bx1 < ax2 < bx2 and ax1 < bx1):
            dx = ax2-bx1
        elif (bx1 < ax1 < bx2 and ax2 > bx2):
            dx = bx2-ax1
        elif (ax1 >= bx1 and ax2 <= bx2):
            dx = ax2-ax1
        elif (bx1 >= ax1 and bx2 <= ax2):
            dx = bx2-bx1

        return total-dx*dy

2.优化代码

最后修改日期: 2021年9月1日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。