码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode -- Rectangle Area

时间:2015-10-17 12:11:46      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:

Question:

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.

技术分享

Assume that the total area is never beyond the maximum possible value of int.

 

 Analysis:

问题描述:计算在二维坐标系中两个矩阵覆盖的面积。每个矩阵由它的左下角和右上角的坐标表示。

思路:关键是求两个矩阵的相交部分的面积。有3种情况:一种是无相交的部分;一种是只有横向和纵向的相交部分,一种是横向和纵向都有相交部分。然而,由图形可知,(A,B)的坐标一定是小于(C,D),(E,F)的坐标一定小于(G,H)。因此看有无相交时,只需要取两个矩形中左下角中较大的作为新矩形的左下角坐标和右上角中较小的作为新矩形的右上角坐标,若新的矩形中右上角的坐标还要比左下角的坐标小,则说明原来的两个矩形不相交,反之则相交。

PS:在计算矩阵面积的过程中,注意int型坐标的计算是否会越界。

 

Answer:

public class Solution {
    public static int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
        int t1 = Math.max(A, E), t2 = Math.max(B, F), t3 = Math.min(C, G), t4 = Math.min(D, H);
        int area1 = getArea(A, B, C, D);
        int area2 = getArea(E, F, G, H);
        int area3 = getArea(t1, t2, t3, t4);
        if(t1 > t3 || t2 > t4)
            return area1 + area2;
        else 
            return area1 + area2 - area3;
        
            
    }
    
    public static int getArea(int A, int B, int C, int D) {
        int length = 0, wide = 0;
        double t1 = (double)A * (double)C, t2 = (double)B * (double)D;
        if(t1 >= 0) 
            length = Math.abs(Math.abs(A) - Math.abs(C));
        else
            length = Math.abs(A) + Math.abs(C);
        if(t2 >= 0) 
            wide = Math.abs(Math.abs(B) - Math.abs(D));
        else
            wide = Math.abs(B) + Math.abs(D);
        return length * wide;    
    }

}

 

LeetCode -- Rectangle Area

标签:

原文地址:http://www.cnblogs.com/little-YTMM/p/4887171.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!