Lettcode_223_Rectangle Area

본 고 는 학습 중의 총 결 입 니 다.전재 하 는 것 을 환영 하지만 출처 를 밝 혀 주 십시오.http://blog.csdn.net/pistolove/article/details/46868363
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.
생각:
(1)문 제 는 두 사각형 의 대각 좌 표를 정 하고 두 사각형 이 형성 하 는 면적 크기 를 구 하 는 것 을 의미한다.
(2)이 문 제 는 비교적 간단 하고 처음에 이 를 분석 할 때 복잡 하 게 고려 했다.두 사각형 간 의 관 계 를 고려 하면 세 가지 가 있 는데 그것 이 바로 상이,교차,포함 이다.서로 떨 어 지 는 것 에 대해 서 는 그 중의 한 사각형 의 가로,세로 좌표 의 최소 치가 다른 최대 치보다 크다 고 판단 하면 된다.포함 에 대해 서 는 그 중의 한 사각형 의 두 정점 좌표 범위 가 다른 사각형 에 있 는 지 여 부 를 판단 하면 된다.포함 에 있어 서 약간 복잡 하 다.그 중의 한 사각형 의 정점 과 두 개의 정점 이 다른 사각형 에 있 는 상황 을 포함한다.본 문제 에 대해 서 는 위의 그림 에서 보 여 준 상황 만 고려 하면 된다.상대 적 으로 간단 하고 총 면적 만 필요 한 다음 에 공공 면적,즉 두 사각형 으로 형 성 된 면적 을 빼 야 한다.
(3)자세 한 내용 은 아래 코드 를 보십시오.본문 이 너 에 게 도움 이 되 기 를 바란다.
알고리즘 코드 는 다음 과 같 습 니 다.
/**
 * 
 * @author lqq
 *
 */
public class Rectangle_Area {
	
	public int computeArea(int A, int B, int C, int D, int E, int F, int G,int H) {
		//
		// //  
		// if((E>=C || G<=A) && (H<=B || F>=D)){
		// int _area1 = (C-A>=0?(C-A):(A-C)) * (B-D>=0?(B-D):(D-B));
		// int _area2 = (G-E>=0?(G-D):(D-G)) * (H-F>=0?(H-F):(F-H));
		//
		// return _area1 + _area2;
		// }
		//
		// //  
		// if((A<=E && E<=C && A<=G &&G<=C&&B<=F&&F<=D&&B<=H&&H<=D)){
		// int _area1 = (C-A>=0?(C-A):(A-C)) * (B-D>=0?(B-D):(D-B));
		// return _area1;
		// }else if((A>=E && E>=C && A>=G &&G>=C&&B>=F&&F>=D&&B>=H&&H>=D)){
		// int _area2 = (G-E>=0?(G-D):(D-G)) * (H-F>=0?(H-F):(F-H));
		// return _area2;
		// }
		//
		// //                  

		int area = (D - B) * (C - A) + (G - E) * (H - F); //    

		int left = Math.max(A, E);
		int down = Math.max(B, F);

		int right = Math.min(G, C);
		int up = Math.min(D, H);

		if (up <= down || right <= left) {
			return area;
		}

		area = area - (right - left) * (up - down);

		return area;
	}
}

좋은 웹페이지 즐겨찾기