223. Rectangle Area
Find the total area covered by two rectilinear rectangles in a 2D plane.
Each rectangle is defined by its bottom left corner and top right corner as shown in the figure.
![Rectangle Area](https://leetcode.com/static/images/problemset/rectangle_area.png)
Assume that the total area is never beyond the maximum possible value of int.
223.矩形面积
在2D平面上求两个矩形覆盖的总面积。
每个矩形由左下角点和右上角点标识。
假设所有区域都没有超过int范围的点坐标。
思路:我们只要能求出两矩形相交的面积,然后用两矩形的面积和减去相交的面积即可。两矩形相交有多种情况,无论哪种情况都要确定相交部分的两个角点。相交部分左下角点由两个矩形的左下角点确定,分别取横纵坐标的大值,右上角点由两个矩形的右上角点确定,分别取横纵坐标的小值。这样就能很容易得到相交部分的面积,从而计算出总覆盖面积。
int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
int ldx = A > E ? A : E;
int ldy = B > F ? B : F;
int rtx = C < G ? C : G;
int rty = D < H ? D : H;
int intersecArea = 0;
if (ldx >= rtx || ldy >= rty) intersecArea = 0;
else intersecArea = (rtx - ldx) * (rty - ldy);
return (C-A)*(D-B) + (G-E)*(H-F) - intersecArea;
}
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
"""
ldx, ldy, rtx, rty = max(A,E), max(B,F), min(C,G), min(D,H)
intersecArea = 0
if ldx >= rtx or ldy >= rty: intersecArea = 0
else: intersecArea = (rtx - ldx) * (rty - ldy)
return (C-A)*(D-B) + (G-E)*(H-F) - intersecArea