我的LeetCode代码仓:https://github.com/617076674/LeetCode
原题链接:https://leetcode-cn.com/problems/rectangle-area/description/
题目描述:
知识点:数学
思路:分情况讨论
首先我们假定A小于等于E,如果A大于E,我们只需将两个矩形坐标调换位置即可。
(1)第一个矩形的右边界小于等于第二个矩形的左边界,如下图所示
(2)第二个矩形的右边界在第一个矩形的左右边界之间
a:第二个矩形的下边界大于等于第一个矩形的上边界
b:第二个矩形的下边界在第一个矩形的上下边界之间
b-1:第二个矩形的上边界大于等于第一个矩形的上边界
b-2:第二个矩形的上边界在第一个矩形的上下边界之间
c:第二个矩形的下边界小于第一个矩形的下边界
c-1:第二个矩形的上边界大于等于第一个矩形的上边界
c-2:第二个矩形的上边界在第一个矩形的上下边界之间
c-3:第二个矩形的上边界小于第一个矩形的下边界
(3)第二个矩形的右边界大于等于第一个矩形的右边界
a:第二个矩形的下边界大于等于第一个矩形的上边界
b:第二个矩形的下边界在第一个矩形的上下边界之间
b-1:第二个矩形的上边界大于等于第一个矩形的上边界
b-2:第二个矩形的上边界在第一个矩形的上下边界之间
c:第二个矩形的下边界小于第一个矩形的下边界
c-1:第二个矩形的上边界大于等于第一个矩形的上边界
c-2:第二个矩形的上边界在第一个矩形的上下边界之间
c-3:第二个矩形的上边界小于第一个矩形的下边界
时间复杂度和空间复杂度均是O(1)。
JAVA代码:
public class Solution {
public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
if(A > E){
return computeArea(E, F, G, H, A, B, C, D);
}
int area1 = (D - B) * (C - A), area2 = (H - F) * (G - E);
if(E >= C){
return area1 + area2;
}
if(G <= C){
if(F >= D){
return area1 + area2;
}else if(F >= B && F < D){
if(H >= D){
return area1 - (D - F) * (G - E) + area2;
}else{
return area1;
}
}else{
if(H >= D){
return area1 - (D - B) * (G - E) + area2;
}else if(H >= B && H < D){
return area1 - (H - B) * (G - E) + area2;
}else{
return area1 + area2;
}
}
}else{
if(F >= D){
return area1 + area2;
}else if(F >= B && F < D){
if(H >= D){
return area1 - (D - F) * (C - E) + area2;
}else{
return area1 - (H - F) * (C - E) + area2;
}
}else{
if(H >= D){
return area1 - (D - B) * (C - E) + area2;
}else if(H >= B && H < D){
return area1 - (H - B) * (C - E) + area2;
}else{
return area1 + area2;
}
}
}
}
}
LeetCode解题报告: