給定兩個軸平行矩形,每個由左下角 (A,B) 和右上角 (C,D) 定義。求兩矩形覆蓋的總面積(重疊區域只算一次)。
保證總面積不超 INT_MAX。
總面積 = 面積1 + 面積2 - 重疊面積
面積1 = (C-A) * (D-B)面積2 = (G-E) * (H-F)max(A, E)min(C, G)max(B, F)min(D, H)右 ≤ 左 或 上 ≤ 下 → 無重疊,重疊面積 = 0(右-左) * (上-下)
class Solution {
public:
int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
long long area1 = 1LL * (C - A) * (D - B);
long long area2 = 1LL * (G - E) * (H - F);
int left = max(A, E), right = min(C, G);
int bottom = max(B, F), top = min(D, H);
long long overlap = 0;
if (right > left && top > bottom) {
overlap = 1LL * (right - left) * (top - bottom);
}
return (int)(area1 + area2 - overlap);
}
};
class Solution:
def computeArea(self, A, B, C, D, E, F, G, H):
area = (C-A)*(D-B) + (G-E)*(H-F)
overlap_w = max(min(C, G) - max(A, E), 0)
overlap_h = max(min(D, H) - max(B, F), 0)
return area - overlap_w * overlap_h
矩形 1:(-3,0,3,4),矩形 2:(0,-1,9,2)
面積1 = 6*4 = 24 面積2 = 9*3 = 27 重疊:左=max(-3,0)=0, 右=min(3,9)=3, 下=max(0,-1)=0, 上=min(4,2)=2 重疊面積 = 3*2 = 6 總面積 = 24+27-6 = 45
right==left)面積為 0,不算重疊long long,最終轉 intLeetCode 223 是幾何基礎題。核心為「總面積 = 面積和 - 重疊面積」,重疊矩形座標由邊界投影交集決定。代碼極短,關鍵在於正確處理無重疊情況(用 max(0, ...) 或分支)。此模式廣泛應用於矩形重疊面積、IOU 計算、碰撞檢測等場景。