class Solution:
def maxKilledEnemies(self, grid: List[List[str]]) -> int:
if not grid or not grid[0]:
return 0
m, n = len(grid), len(grid[0])
max_kills = 0
row_hits = 0
col_hits = [0] * n
for i in range(m):
for j in range(n):
# Compute row_hits
if j == 0 or grid[i][j-1] == 'W':
row_hits = 0
k = j
while k < n and grid[i][k] != 'W':
if grid[i][k] == 'E':
row_hits += 1
k += 1
# Compute col_hits
if i == 0 or grid[i-1][j] == 'W':
col_hits[j] = 0
k = i
while k < m and grid[k][j] != 'W':
if grid[k][j] == 'E':
col_hits[j] += 1
k += 1
if grid[i][j] == '0':
max_kills = max(max_kills, row_hits + col_hits[j])
return max_kills
class Solution {
public:
int maxKilledEnemies(vector<vector<char>>& grid) {
if (grid.empty() || grid[0].empty()) return 0;
int m = grid.size(), n = grid[0].size();
int max_kills = 0;
int row_hits = 0;
vector<int> col_hits(n, 0);
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
// Compute row_hits
if (j == 0 || grid[i][j-1] == 'W') {
row_hits = 0;
for (int k = j; k < n && grid[i][k] != 'W'; ++k) {
if (grid[i][k] == 'E') row_hits++;
}
}
// Compute col_hits
if (i == 0 || grid[i-1][j] == 'W') {
col_hits[j] = 0;
for (int k = i; k < m && grid[k][j] != 'W'; ++k) {
if (grid[k][j] == 'E') col_hits[j]++;
}
}
if (grid[i][j] == '0') {
max_kills = max(max_kills, row_hits + col_hits[j]);
}
}
}
return max_kills;
}
};
class Solution {
public int maxKilledEnemies(char[][] grid) {
if (grid == null || grid.length == 0 || grid[0].length == 0) return 0;
int m = grid.length, n = grid[0].length;
int maxKills = 0;
int rowHits = 0;
int[] colHits = new int[n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
// Compute rowHits
if (j == 0 || grid[i][j-1] == 'W') {
rowHits = 0;
for (int k = j; k < n && grid[i][k] != 'W'; k++) {
if (grid[i][k] == 'E') rowHits++;
}
}
// Compute colHits
if (i == 0 || grid[i-1][j] == 'W') {
colHits[j] = 0;
for (int k = i; k < m && grid[k][j] != 'W'; k++) {
if (grid[k][j] == 'E') colHits[j]++;
}
}
if (grid[i][j] == '0') {
maxKills = Math.max(maxKills, rowHits + colHits[j]);
}
}
}
return maxKills;
}
}
var maxKilledEnemies = function(grid) {
if (!grid || grid.length === 0 || grid[0].length === 0) return 0;
let m = grid.length, n = grid[0].length;
let maxKills = 0;
let rowHits = 0;
let colHits = new Array(n).fill(0);
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
// Compute rowHits
if (j === 0 || grid[i][j-1] === 'W') {
rowHits = 0;
for (let k = j; k < n && grid[i][k] !== 'W'; k++) {
if (grid[i][k] === 'E') rowHits++;
}
}
// Compute colHits
if (i === 0 || grid[i-1][j] === 'W') {
colHits[j] = 0;
for (let k = i; k < m && grid[k][j] !== 'W'; k++) {
if (grid[k][j] === 'E') colHits[j]++;
}
}
if (grid[i][j] === '0') {
maxKills = Math.max(maxKills, rowHits + colHits[j]);
}
}
}
return maxKills;
};
'0'
). The bomb kills all enemies in the same row and column until it hits a wall ('W'
). The bomb does not kill enemies behind a wall or in other rows/columns.
row_hits
.col_hits
(an array, one per column).'0'
), the total enemies killed by a bomb is row_hits + col_hits[j]
, where j
is the column index.[ ['0', 'E', '0', '0'], ['E', '0', 'W', 'E'], ['0', 'E', '0', '0'] ]