Skip to content

Commit a542cf9

Browse files
committed
feat: add solutions to lc problem: No.0223
No.0223.Rectangle Area
1 parent f09d488 commit a542cf9

File tree

4 files changed

+98
-19
lines changed

4 files changed

+98
-19
lines changed

solution/0200-0299/0223.Rectangle Area/README.md

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,11 @@
4545

4646
<!-- 这里可写通用的实现逻辑 -->
4747

48-
计算重叠部分的面积,注意考虑没有重叠的情况
48+
**方法一:计算重叠面积**
49+
50+
我们先计算出两个矩形各自的面积,记为 $a$ 和 $b$,然后计算重叠的宽度 $width$ 和高度 $height$,那么重叠的面积为 $max(width, 0) \times max(height, 0)$,最后将 $a$、$b$ 和重叠面积相减即可。
51+
52+
时间复杂度 $O(1)$,空间复杂度 $O(1)$。
4953

5054
<!-- tabs:start -->
5155

@@ -130,6 +134,41 @@ func min(a, b int) int {
130134
}
131135
```
132136

137+
### **TypeScript**
138+
139+
```ts
140+
function computeArea(
141+
ax1: number,
142+
ay1: number,
143+
ax2: number,
144+
ay2: number,
145+
bx1: number,
146+
by1: number,
147+
bx2: number,
148+
by2: number,
149+
): number {
150+
const a = (ax2 - ax1) * (ay2 - ay1);
151+
const b = (bx2 - bx1) * (by2 - by1);
152+
const width = Math.min(ax2, bx2) - Math.max(ax1, bx1);
153+
const height = Math.min(ay2, by2) - Math.max(ay1, by1);
154+
return a + b - Math.max(width, 0) * Math.max(height, 0);
155+
}
156+
```
157+
158+
### **C#**
159+
160+
```cs
161+
public class Solution {
162+
public int ComputeArea(int ax1, int ay1, int ax2, int ay2, int bx1, int by1, int bx2, int by2) {
163+
int a = (ax2 - ax1) * (ay2 - ay1);
164+
int b = (bx2 - bx1) * (by2 - by1);
165+
int width = Math.Min(ax2, bx2) - Math.Max(ax1, bx1);
166+
int height = Math.Min(ay2, by2) - Math.Max(ay1, by1);
167+
return a + b - Math.Max(height, 0) * Math.Max(width, 0);
168+
}
169+
}
170+
```
171+
133172
### **...**
134173

135174
```

solution/0200-0299/0223.Rectangle Area/README_EN.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,41 @@ func min(a, b int) int {
116116
}
117117
```
118118

119+
### **TypeScript**
120+
121+
```ts
122+
function computeArea(
123+
ax1: number,
124+
ay1: number,
125+
ax2: number,
126+
ay2: number,
127+
bx1: number,
128+
by1: number,
129+
bx2: number,
130+
by2: number,
131+
): number {
132+
const a = (ax2 - ax1) * (ay2 - ay1);
133+
const b = (bx2 - bx1) * (by2 - by1);
134+
const width = Math.min(ax2, bx2) - Math.max(ax1, bx1);
135+
const height = Math.min(ay2, by2) - Math.max(ay1, by1);
136+
return a + b - Math.max(width, 0) * Math.max(height, 0);
137+
}
138+
```
139+
140+
### **C#**
141+
142+
```cs
143+
public class Solution {
144+
public int ComputeArea(int ax1, int ay1, int ax2, int ay2, int bx1, int by1, int bx2, int by2) {
145+
int a = (ax2 - ax1) * (ay2 - ay1);
146+
int b = (bx2 - bx1) * (by2 - by1);
147+
int width = Math.Min(ax2, bx2) - Math.Max(ax1, bx1);
148+
int height = Math.Min(ay2, by2) - Math.Max(ay1, by1);
149+
return a + b - Math.Max(height, 0) * Math.Max(width, 0);
150+
}
151+
}
152+
```
153+
119154
### **...**
120155

121156
```
Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,9 @@
1-
// https://leetcode.com/problems/rectangle-area/
2-
3-
using System;
4-
5-
public partial class Solution
6-
{
7-
public int ComputeArea(int A, int B, int C, int D, int E, int F, int G, int H)
8-
{
9-
var area = (long)(C - A) * (D - B) + (G - E) * (H - F);
10-
var overlapA = Math.Max(A, E);
11-
var overlapB = Math.Max(B, F);
12-
var overlapC = Math.Min(C, G);
13-
var overlapD = Math.Min(D, H);
14-
if (overlapA < overlapC && overlapB < overlapD)
15-
{
16-
area -= (overlapC - overlapA) * (overlapD - overlapB);
17-
}
18-
return (int)area;
1+
public class Solution {
2+
public int ComputeArea(int ax1, int ay1, int ax2, int ay2, int bx1, int by1, int bx2, int by2) {
3+
int a = (ax2 - ax1) * (ay2 - ay1);
4+
int b = (bx2 - bx1) * (by2 - by1);
5+
int width = Math.Min(ax2, bx2) - Math.Max(ax1, bx1);
6+
int height = Math.Min(ay2, by2) - Math.Max(ay1, by1);
7+
return a + b - Math.Max(height, 0) * Math.Max(width, 0);
198
}
209
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
function computeArea(
2+
ax1: number,
3+
ay1: number,
4+
ax2: number,
5+
ay2: number,
6+
bx1: number,
7+
by1: number,
8+
bx2: number,
9+
by2: number,
10+
): number {
11+
const a = (ax2 - ax1) * (ay2 - ay1);
12+
const b = (bx2 - bx1) * (by2 - by1);
13+
const width = Math.min(ax2, bx2) - Math.max(ax1, bx1);
14+
const height = Math.min(ay2, by2) - Math.max(ay1, by1);
15+
return a + b - Math.max(width, 0) * Math.max(height, 0);
16+
}

0 commit comments

Comments
 (0)