From 3d8269d31e8622406a8d231ba0e37ab5a86fd442 Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Sat, 23 Aug 2025 07:36:12 +0800 Subject: [PATCH] feat: add csharp solution to lc problem: No.3197 No.3197.Find the Minimum Area to Cover All Ones II --- .../README.md | 61 +++++++++++++++++++ .../README_EN.md | 61 +++++++++++++++++++ .../Solution.cs | 56 +++++++++++++++++ 3 files changed, 178 insertions(+) create mode 100644 solution/3100-3199/3197.Find the Minimum Area to Cover All Ones II/Solution.cs diff --git a/solution/3100-3199/3197.Find the Minimum Area to Cover All Ones II/README.md b/solution/3100-3199/3197.Find the Minimum Area to Cover All Ones II/README.md index a4aa5b729407e..2083dbf1f5f4d 100644 --- a/solution/3100-3199/3197.Find the Minimum Area to Cover All Ones II/README.md +++ b/solution/3100-3199/3197.Find the Minimum Area to Cover All Ones II/README.md @@ -535,6 +535,67 @@ var minimumSum = function (grid) { }; ``` +#### C# + +```cs +public class Solution { + private const int INF = 1 << 30; + private int[][] grid; + + public int MinimumSum(int[][] grid) { + this.grid = grid; + int m = grid.Length; + int n = grid[0].Length; + int ans = m * n; + + for (int i1 = 0; i1 < m - 1; i1++) { + for (int i2 = i1 + 1; i2 < m - 1; i2++) { + ans = Math.Min( + ans, F(0, 0, i1, n - 1) + F(i1 + 1, 0, i2, n - 1) + F(i2 + 1, 0, m - 1, n - 1)); + } + } + + for (int j1 = 0; j1 < n - 1; j1++) { + for (int j2 = j1 + 1; j2 < n - 1; j2++) { + ans = Math.Min( + ans, F(0, 0, m - 1, j1) + F(0, j1 + 1, m - 1, j2) + F(0, j2 + 1, m - 1, n - 1)); + } + } + + for (int i = 0; i < m - 1; i++) { + for (int j = 0; j < n - 1; j++) { + ans = Math.Min( + ans, F(0, 0, i, j) + F(0, j + 1, i, n - 1) + F(i + 1, 0, m - 1, n - 1)); + ans = Math.Min( + ans, F(0, 0, i, n - 1) + F(i + 1, 0, m - 1, j) + F(i + 1, j + 1, m - 1, n - 1)); + + ans = Math.Min( + ans, F(0, 0, i, j) + F(i + 1, 0, m - 1, j) + F(0, j + 1, m - 1, n - 1)); + ans = Math.Min( + ans, F(0, 0, m - 1, j) + F(0, j + 1, i, n - 1) + F(i + 1, j + 1, m - 1, n - 1)); + } + } + return ans; + } + + private int F(int i1, int j1, int i2, int j2) { + int x1 = INF, y1 = INF; + int x2 = -INF, y2 = -INF; + for (int i = i1; i <= i2; i++) { + for (int j = j1; j <= j2; j++) { + if (grid[i][j] == 1) { + x1 = Math.Min(x1, i); + y1 = Math.Min(y1, j); + x2 = Math.Max(x2, i); + y2 = Math.Max(y2, j); + } + } + } + return (x2 - x1 + 1) * (y2 - y1 + 1); + } +} +``` + diff --git a/solution/3100-3199/3197.Find the Minimum Area to Cover All Ones II/README_EN.md b/solution/3100-3199/3197.Find the Minimum Area to Cover All Ones II/README_EN.md index c06469408458b..2028e293aa57c 100644 --- a/solution/3100-3199/3197.Find the Minimum Area to Cover All Ones II/README_EN.md +++ b/solution/3100-3199/3197.Find the Minimum Area to Cover All Ones II/README_EN.md @@ -533,6 +533,67 @@ var minimumSum = function (grid) { }; ``` +#### C# + +```cs +public class Solution { + private const int INF = 1 << 30; + private int[][] grid; + + public int MinimumSum(int[][] grid) { + this.grid = grid; + int m = grid.Length; + int n = grid[0].Length; + int ans = m * n; + + for (int i1 = 0; i1 < m - 1; i1++) { + for (int i2 = i1 + 1; i2 < m - 1; i2++) { + ans = Math.Min( + ans, F(0, 0, i1, n - 1) + F(i1 + 1, 0, i2, n - 1) + F(i2 + 1, 0, m - 1, n - 1)); + } + } + + for (int j1 = 0; j1 < n - 1; j1++) { + for (int j2 = j1 + 1; j2 < n - 1; j2++) { + ans = Math.Min( + ans, F(0, 0, m - 1, j1) + F(0, j1 + 1, m - 1, j2) + F(0, j2 + 1, m - 1, n - 1)); + } + } + + for (int i = 0; i < m - 1; i++) { + for (int j = 0; j < n - 1; j++) { + ans = Math.Min( + ans, F(0, 0, i, j) + F(0, j + 1, i, n - 1) + F(i + 1, 0, m - 1, n - 1)); + ans = Math.Min( + ans, F(0, 0, i, n - 1) + F(i + 1, 0, m - 1, j) + F(i + 1, j + 1, m - 1, n - 1)); + + ans = Math.Min( + ans, F(0, 0, i, j) + F(i + 1, 0, m - 1, j) + F(0, j + 1, m - 1, n - 1)); + ans = Math.Min( + ans, F(0, 0, m - 1, j) + F(0, j + 1, i, n - 1) + F(i + 1, j + 1, m - 1, n - 1)); + } + } + return ans; + } + + private int F(int i1, int j1, int i2, int j2) { + int x1 = INF, y1 = INF; + int x2 = -INF, y2 = -INF; + for (int i = i1; i <= i2; i++) { + for (int j = j1; j <= j2; j++) { + if (grid[i][j] == 1) { + x1 = Math.Min(x1, i); + y1 = Math.Min(y1, j); + x2 = Math.Max(x2, i); + y2 = Math.Max(y2, j); + } + } + } + return (x2 - x1 + 1) * (y2 - y1 + 1); + } +} +``` + diff --git a/solution/3100-3199/3197.Find the Minimum Area to Cover All Ones II/Solution.cs b/solution/3100-3199/3197.Find the Minimum Area to Cover All Ones II/Solution.cs new file mode 100644 index 0000000000000..6f900848742ac --- /dev/null +++ b/solution/3100-3199/3197.Find the Minimum Area to Cover All Ones II/Solution.cs @@ -0,0 +1,56 @@ +public class Solution { + private const int INF = 1 << 30; + private int[][] grid; + + public int MinimumSum(int[][] grid) { + this.grid = grid; + int m = grid.Length; + int n = grid[0].Length; + int ans = m * n; + + for (int i1 = 0; i1 < m - 1; i1++) { + for (int i2 = i1 + 1; i2 < m - 1; i2++) { + ans = Math.Min( + ans, F(0, 0, i1, n - 1) + F(i1 + 1, 0, i2, n - 1) + F(i2 + 1, 0, m - 1, n - 1)); + } + } + + for (int j1 = 0; j1 < n - 1; j1++) { + for (int j2 = j1 + 1; j2 < n - 1; j2++) { + ans = Math.Min( + ans, F(0, 0, m - 1, j1) + F(0, j1 + 1, m - 1, j2) + F(0, j2 + 1, m - 1, n - 1)); + } + } + + for (int i = 0; i < m - 1; i++) { + for (int j = 0; j < n - 1; j++) { + ans = Math.Min( + ans, F(0, 0, i, j) + F(0, j + 1, i, n - 1) + F(i + 1, 0, m - 1, n - 1)); + ans = Math.Min( + ans, F(0, 0, i, n - 1) + F(i + 1, 0, m - 1, j) + F(i + 1, j + 1, m - 1, n - 1)); + + ans = Math.Min( + ans, F(0, 0, i, j) + F(i + 1, 0, m - 1, j) + F(0, j + 1, m - 1, n - 1)); + ans = Math.Min( + ans, F(0, 0, m - 1, j) + F(0, j + 1, i, n - 1) + F(i + 1, j + 1, m - 1, n - 1)); + } + } + return ans; + } + + private int F(int i1, int j1, int i2, int j2) { + int x1 = INF, y1 = INF; + int x2 = -INF, y2 = -INF; + for (int i = i1; i <= i2; i++) { + for (int j = j1; j <= j2; j++) { + if (grid[i][j] == 1) { + x1 = Math.Min(x1, i); + y1 = Math.Min(y1, j); + x2 = Math.Max(x2, i); + y2 = Math.Max(y2, j); + } + } + } + return (x2 - x1 + 1) * (y2 - y1 + 1); + } +}