LeetCode 223. 矩形面积 // 力扣 223. 矩形面积(华为笔试//面试)
来源:力扣(LeetCode)
链接:题目链接
题目描述
在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。
每个矩形由其左下顶点和右上顶点坐标表示,如图所示。
示例:
输入: -3, 0, 3, 4, 0, -1, 9, 2
输出: 45
说明: 假设矩形面积不会超出 int 的范围。
题目意思是
1:如果两个矩形不重叠,则两个矩形面积相加即结果;
2:如果两个矩形重叠,则结果等于 矩形1 + 矩形2 - 重叠矩形面积
这个题目的子问题是:
子问题跳转
参考代码:
class Solution {
public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
int area1 = (C - A) * (D - B);
int area2 = (G - E) * (H - F);
if (C <= E || G <= A || H <= B || D <= F)//没有交集的情况下,直接输出两个矩形面积
return (area1 + area2);
int x1 = Math.max(A, E);
int x2 = Math.min(C, G);
int y1 = Math.min(H, D);
int y2 = Math.max(B, F);
int area3 = (x2 - x1) * (y1 - y2);
return area1 - area3 + area2;
}
}
其中:
C <= E || G <= A || H <= B || D <= F
这里参考:LeetCode 836.矩形重叠,表示满足这个条件下,则两个矩形不重叠。
其中
int x1 = Math.max(A, E);
int x2 = Math.min(C, G);
int y1 = Math.min(H, D);
int y2 = Math.max(B, F);
int area3 = (x2 - x1) * (y1 - y2);
这里,参考LeetCode解析:
最后, 要考虑重叠的情况,因为一定有重叠,所以可以找到上下左右边界
上边界,取两个矩形的上边界的最小值
下边界,取两个矩形的下边界的最大值
左边界,取两个矩形的左边界的最大值
右边界,取两个矩形的右边界的最小值
得到重叠面积,只需要两个矩形相加减去重叠面积即可!