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.
对各种case做好处理,分别分析相交图形的长宽,求面积。
class Solution {
public:
int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
int l1 = 0;
int l2 = 0;
if(A<=E&&G<=C)
l1 = G-E;
if(A<=E&&E<=C&&C<=G)
l1 = C-E;
if(E<=A&&A<=G&&G<=C)
l1 = G-A;
if(E<=A&&C<=G)
l1 = C-A;
if(B<=F&&H<=D)
l2 = H-F;
if(B<=F&&F<=D&&D<=H)
l2 = D-F;
if(F<=B&&B<=H&&H<=D)
l2 = H-B;
if(F<=B&&D<=H)
l2 = D-B;
return (C-A)*(D-B)+(G-E)*(H-F)-l1*l2;
}
};
这段代码太过冗余,实际上对两个线段求相交时,就是取前两个点的最小值和后两个点的最大值。可以用一行代码解决。
class Solution {
public:
int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
return (C-A)*(D-B)+(G-E)*(H-F)-max(0,min(C,G)-max(E,A))*max(0,min(D,H)-max(F,B));
}
};