forked from szl0072/Leetcode-Solution-Code
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathBombEnemy.java
70 lines (62 loc) · 1.98 KB
/
BombEnemy.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package leetcode;
/**
* Project Name : Leetcode
* Package Name : leetcode
* File Name : BombEnemy
* Creator : Edward
* Date : Jan, 2018
* Description : 361. Bomb Enemy
*/
public class BombEnemy {
/**
* Given a 2D grid, each cell is either a wall 'W', an enemy 'E' or empty '0' (the number zero),
* return the maximum enemies you can kill using one bomb.
The bomb kills all the enemies in the same row and column from the planted point until it hits the wall
since the wall is too strong to be destroyed.
Note that you can only put the bomb at an empty cell.
Example:
For the given grid
0 E 0 0
E 0 W E
0 E 0 0
return 3. (Placing a bomb at (1,1) kills 3 enemies)
for(i)
for(j) {
j
}
1,遍历
2,扫描当前行 :i 不变 j rowCount
3,扫描当前列 :j 不变 i (colCount[])
time : O(m * n)
space : O(n)
* @param grid
* @return
*/
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 rowCount = 0;
int[] colCount = new int[n];
int res = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (j == 0 || grid[i][j - 1] == 'W') {
rowCount = 0;
for (int k = j; k < n && grid[i][k] != 'W'; k++) {
rowCount += grid[i][k] == 'E' ? 1 : 0;
}
}
if (i == 0 || grid[i - 1][j] == 'W') {
colCount[j] = 0;
for (int k = i; k < m && grid[k][j] != 'W'; k++) {
colCount[j] += grid[k][j] == 'E' ? 1 : 0;
}
}
if (grid[i][j] == '0') {
res = Math.max(res, colCount[j] + rowCount);
}
}
}
return res;
}
}