Skip to content

Commit ff2df3f

Browse files
authored
feat: add csharp solution to lc problem: No.3197 (#4660)
No.3197.Find the Minimum Area to Cover All Ones II
1 parent 1f006bc commit ff2df3f

File tree

3 files changed

+178
-0
lines changed

3 files changed

+178
-0
lines changed

solution/3100-3199/3197.Find the Minimum Area to Cover All Ones II/README.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,67 @@ var minimumSum = function (grid) {
535535
};
536536
```
537537

538+
#### C#
539+
540+
```cs
541+
public class Solution {
542+
private const int INF = 1 << 30;
543+
private int[][] grid;
544+
545+
public int MinimumSum(int[][] grid) {
546+
this.grid = grid;
547+
int m = grid.Length;
548+
int n = grid[0].Length;
549+
int ans = m * n;
550+
551+
for (int i1 = 0; i1 < m - 1; i1++) {
552+
for (int i2 = i1 + 1; i2 < m - 1; i2++) {
553+
ans = Math.Min(
554+
ans, F(0, 0, i1, n - 1) + F(i1 + 1, 0, i2, n - 1) + F(i2 + 1, 0, m - 1, n - 1));
555+
}
556+
}
557+
558+
for (int j1 = 0; j1 < n - 1; j1++) {
559+
for (int j2 = j1 + 1; j2 < n - 1; j2++) {
560+
ans = Math.Min(
561+
ans, F(0, 0, m - 1, j1) + F(0, j1 + 1, m - 1, j2) + F(0, j2 + 1, m - 1, n - 1));
562+
}
563+
}
564+
565+
for (int i = 0; i < m - 1; i++) {
566+
for (int j = 0; j < n - 1; j++) {
567+
ans = Math.Min(
568+
ans, F(0, 0, i, j) + F(0, j + 1, i, n - 1) + F(i + 1, 0, m - 1, n - 1));
569+
ans = Math.Min(
570+
ans, F(0, 0, i, n - 1) + F(i + 1, 0, m - 1, j) + F(i + 1, j + 1, m - 1, n - 1));
571+
572+
ans = Math.Min(
573+
ans, F(0, 0, i, j) + F(i + 1, 0, m - 1, j) + F(0, j + 1, m - 1, n - 1));
574+
ans = Math.Min(
575+
ans, F(0, 0, m - 1, j) + F(0, j + 1, i, n - 1) + F(i + 1, j + 1, m - 1, n - 1));
576+
}
577+
}
578+
return ans;
579+
}
580+
581+
private int F(int i1, int j1, int i2, int j2) {
582+
int x1 = INF, y1 = INF;
583+
int x2 = -INF, y2 = -INF;
584+
for (int i = i1; i <= i2; i++) {
585+
for (int j = j1; j <= j2; j++) {
586+
if (grid[i][j] == 1) {
587+
x1 = Math.Min(x1, i);
588+
y1 = Math.Min(y1, j);
589+
x2 = Math.Max(x2, i);
590+
y2 = Math.Max(y2, j);
591+
}
592+
}
593+
}
594+
return (x2 - x1 + 1) * (y2 - y1 + 1);
595+
}
596+
}
597+
```
598+
538599
<!-- tabs:end -->
539600

540601
<!-- solution:end -->

solution/3100-3199/3197.Find the Minimum Area to Cover All Ones II/README_EN.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,67 @@ var minimumSum = function (grid) {
533533
};
534534
```
535535

536+
#### C#
537+
538+
```cs
539+
public class Solution {
540+
private const int INF = 1 << 30;
541+
private int[][] grid;
542+
543+
public int MinimumSum(int[][] grid) {
544+
this.grid = grid;
545+
int m = grid.Length;
546+
int n = grid[0].Length;
547+
int ans = m * n;
548+
549+
for (int i1 = 0; i1 < m - 1; i1++) {
550+
for (int i2 = i1 + 1; i2 < m - 1; i2++) {
551+
ans = Math.Min(
552+
ans, F(0, 0, i1, n - 1) + F(i1 + 1, 0, i2, n - 1) + F(i2 + 1, 0, m - 1, n - 1));
553+
}
554+
}
555+
556+
for (int j1 = 0; j1 < n - 1; j1++) {
557+
for (int j2 = j1 + 1; j2 < n - 1; j2++) {
558+
ans = Math.Min(
559+
ans, F(0, 0, m - 1, j1) + F(0, j1 + 1, m - 1, j2) + F(0, j2 + 1, m - 1, n - 1));
560+
}
561+
}
562+
563+
for (int i = 0; i < m - 1; i++) {
564+
for (int j = 0; j < n - 1; j++) {
565+
ans = Math.Min(
566+
ans, F(0, 0, i, j) + F(0, j + 1, i, n - 1) + F(i + 1, 0, m - 1, n - 1));
567+
ans = Math.Min(
568+
ans, F(0, 0, i, n - 1) + F(i + 1, 0, m - 1, j) + F(i + 1, j + 1, m - 1, n - 1));
569+
570+
ans = Math.Min(
571+
ans, F(0, 0, i, j) + F(i + 1, 0, m - 1, j) + F(0, j + 1, m - 1, n - 1));
572+
ans = Math.Min(
573+
ans, F(0, 0, m - 1, j) + F(0, j + 1, i, n - 1) + F(i + 1, j + 1, m - 1, n - 1));
574+
}
575+
}
576+
return ans;
577+
}
578+
579+
private int F(int i1, int j1, int i2, int j2) {
580+
int x1 = INF, y1 = INF;
581+
int x2 = -INF, y2 = -INF;
582+
for (int i = i1; i <= i2; i++) {
583+
for (int j = j1; j <= j2; j++) {
584+
if (grid[i][j] == 1) {
585+
x1 = Math.Min(x1, i);
586+
y1 = Math.Min(y1, j);
587+
x2 = Math.Max(x2, i);
588+
y2 = Math.Max(y2, j);
589+
}
590+
}
591+
}
592+
return (x2 - x1 + 1) * (y2 - y1 + 1);
593+
}
594+
}
595+
```
596+
536597
<!-- tabs:end -->
537598

538599
<!-- solution:end -->
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
public class Solution {
2+
private const int INF = 1 << 30;
3+
private int[][] grid;
4+
5+
public int MinimumSum(int[][] grid) {
6+
this.grid = grid;
7+
int m = grid.Length;
8+
int n = grid[0].Length;
9+
int ans = m * n;
10+
11+
for (int i1 = 0; i1 < m - 1; i1++) {
12+
for (int i2 = i1 + 1; i2 < m - 1; i2++) {
13+
ans = Math.Min(
14+
ans, F(0, 0, i1, n - 1) + F(i1 + 1, 0, i2, n - 1) + F(i2 + 1, 0, m - 1, n - 1));
15+
}
16+
}
17+
18+
for (int j1 = 0; j1 < n - 1; j1++) {
19+
for (int j2 = j1 + 1; j2 < n - 1; j2++) {
20+
ans = Math.Min(
21+
ans, F(0, 0, m - 1, j1) + F(0, j1 + 1, m - 1, j2) + F(0, j2 + 1, m - 1, n - 1));
22+
}
23+
}
24+
25+
for (int i = 0; i < m - 1; i++) {
26+
for (int j = 0; j < n - 1; j++) {
27+
ans = Math.Min(
28+
ans, F(0, 0, i, j) + F(0, j + 1, i, n - 1) + F(i + 1, 0, m - 1, n - 1));
29+
ans = Math.Min(
30+
ans, F(0, 0, i, n - 1) + F(i + 1, 0, m - 1, j) + F(i + 1, j + 1, m - 1, n - 1));
31+
32+
ans = Math.Min(
33+
ans, F(0, 0, i, j) + F(i + 1, 0, m - 1, j) + F(0, j + 1, m - 1, n - 1));
34+
ans = Math.Min(
35+
ans, F(0, 0, m - 1, j) + F(0, j + 1, i, n - 1) + F(i + 1, j + 1, m - 1, n - 1));
36+
}
37+
}
38+
return ans;
39+
}
40+
41+
private int F(int i1, int j1, int i2, int j2) {
42+
int x1 = INF, y1 = INF;
43+
int x2 = -INF, y2 = -INF;
44+
for (int i = i1; i <= i2; i++) {
45+
for (int j = j1; j <= j2; j++) {
46+
if (grid[i][j] == 1) {
47+
x1 = Math.Min(x1, i);
48+
y1 = Math.Min(y1, j);
49+
x2 = Math.Max(x2, i);
50+
y2 = Math.Max(y2, j);
51+
}
52+
}
53+
}
54+
return (x2 - x1 + 1) * (y2 - y1 + 1);
55+
}
56+
}

0 commit comments

Comments
 (0)