题目描述:
在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。
每个矩形由其左下顶点和右上顶点坐标表示,如图所示。
示例:
输入: -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))