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

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

示例:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rectangle-area
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:

思路比较简单,

先判断一下存不存在重叠的部分,

判断的依据是: 如果【A, C】和【E, G】存在交集 并且 【B, D】和【F, H】存在交集,则说明存在重叠面积,

再分别计算出两个矩形各自的面积, 加在一起最后减去重叠部分的面积就是总面积了。

class Solution(object):
    def computeArea(self, A, B, C, D, E, F, G, H):
        """
        :type A: int
        :type B: int
        :type C: int
        :type D: int
        :type E: int
        :type F: int
        :type G: int
        :type H: int
        :rtype: int
        """
        # [A, C]和[E, G]取交集, [B, D]和[F, H]取交集
        if min(C, G) - max(A, E) < 0 or min(D, H) - max(B, F) < 0:
            S_overlap = 0
        else:
            S_overlap = (min(C, G) - max(A, E)) * (min(D, H) - max(B, F))
        S_first_square = (D - B) * (C - A)
        S_second_square = (H - F) * (G - E)
        # print S_second_square, S_first_square, S_overlap
        return S_second_square + S_first_square - S_overlap