原题网址:https://leetcode.com/problems/bomb-enemy/
方法:动态规划。public class Solution {
public int maxKilledEnemies(char[][] grid) {
if (grid == null || grid.length == 0 || grid[0].length == 0) return 0;
int m = grid.length;
int n = grid[0].length;
int[][] r = new int[m][n];
int[][] d = new int[m][n];
int[][] l = new int[m][n];
int[][] u = new int[m][n];
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++) {
if (grid[i][j] == 'W') continue;
if (grid[i][j] == 'E') r[i][j] = 1;
if (j > 0) r[i][j] += r[i][j-1];
}
}
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++) {
if (grid[i][j] == 'W') continue;
if (grid[i][j] == 'E') d[i][j] = 1;
if (i > 0) d[i][j] += d[i-1][j];
}
}
for(int i=m-1; i>=0; i--) {
for(int j=n-1; j>=0; j--) {
if (grid[i][j] == 'W') continue;
if (grid[i][j] == 'E') l[i][j] = 1;
if (j < n-1) l[i][j] += l[i][j+1];
}
}
for(int i=m-1; i>=0; i--) {
for(int j=n-1; j>=0; j--) {
if (grid[i][j] == 'W') continue;
if (grid[i][j] == 'E') u[i][j] = 1;
if (i < m-1) u[i][j] += u[i+1][j];
}
}
int max = 0;
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++) {
if (grid[i][j] == '0') max = Math.max(max, l[i][j]+r[i][j]+u[i][j]+d[i][j]);
}
}
return max;
}
}

被折叠的 条评论
为什么被折叠?



