Categories
不学无术

LeetCode 223. Rectangle Area

题目

题目大意是给定两个长方形的坐标,计算他们一起覆盖的面积。
总的思路很简单,Area_A + Area_B – Overlap,具体求重合的面积则需要计算重合区域的两个坐标点。
那么就要分情况讨论,以重合区左下角点的横坐标为例,需要判断点E与横坐标AC的位置关系,即三种:E<A; A<E<C; C<E。

代码

class Solution {
public:
    int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
        int pt_M[2], pt_N[2];
        int area_A_or_B = (C-A)*(D-B) + (G-E)*(H-F);
        //pt_M[0]
        if(E<A)
            pt_M[0] = A;
        else if(E<=C)
            pt_M[0] = E;
        else
            return area_A_or_B;
        //pt_N[0]
        if(G<=A)
            return area_A_or_B;
        else if(G<=C)
            pt_N[0] = G;
        else
            pt_N[0] = C;
        //pt_M[1]
        if(F<B)
            pt_M[1] = B;
        else if(F <= D)
            pt_M[1] = F;
        else
            return area_A_or_B;
        //pt_N[1]
        if(H<=B)
            return area_A_or_B;
        else if(H<=D)
            pt_N[1] = H;
        else
            pt_N[1] = D;
        return area_A_or_B - (pt_N[0]-pt_M[0]) * (pt_N[1]-pt_M[1]);
    }
};

 
 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.