Advertisement
2257. Count Unguarded Cells in the Grid
UnknownView on LeetCode
2257.cs
C#
public class Solution
{
public int CountUnguarded(int m, int n, int[][] guards, int[][] walls)
{
int ans = 0;
char[,] grid = new char[m, n];
char[,] left = new char[m, n];
char[,] right = new char[m, n];
char[,] up = new char[m, n];
char[,] down = new char[m, n];
foreach (var guard in guards)
grid[guard[0], guard[1]] = 'G';
foreach (var wall in walls)
grid[wall[0], wall[1]] = 'W';
for (int i = 0; i < m; ++i)
{
char lastCell = '\0';
for (int j = 0; j < n; ++j)
{
if (grid[i, j] == 'G' || grid[i, j] == 'W')
lastCell = grid[i, j];
else
left[i, j] = lastCell;
}
lastCell = '\0';
for (int j = n - 1; j >= 0; --j)
{
if (grid[i, j] == 'G' || grid[i, j] == 'W')
lastCell = grid[i, j];
else
right[i, j] = lastCell;
}
}
for (int j = 0; j < n; ++j)
{
char lastCell = '\0';
for (int i = 0; i < m; ++i)
{
if (grid[i, j] == 'G' || grid[i, j] == 'W')
lastCell = grid[i, j];
else
up[i, j] = lastCell;
}
lastCell = '\0';
for (int i = m - 1; i >= 0; --i)
{
if (grid[i, j] == 'G' || grid[i, j] == 'W')
lastCell = grid[i, j];
else
down[i, j] = lastCell;
}
}
for (int i = 0; i < m; ++i)
{
for (int j = 0; j < n; ++j)
{
if (grid[i, j] == '\0' && left[i, j] != 'G' && right[i, j] != 'G' && up[i, j] != 'G'
&& down[i, j] != 'G')
++ans;
}
}
return ans;
}
}Advertisement
Was this solution helpful?