边工作边刷题:70天一遍leetcode: day 97
Bomb Enemy
要点:
- 什么题?目标是合适的地方摆1个炸弹优化最大攻击怪物数,
- 为什么这个目标和横竖统计有关(内在关联是什么?):炸弹的特性:分段,某个点和某段内的前后方向都有关联。所以统计段内怪物数
- 处理的方向是逐行遍历matrix,所以”预处理"可以同时进行:在某段的左边界做,之后其他同段点可以共享。边界条件即初始i==0 or i-1为障碍,终止i为右边界 or i+1为障碍
- (optional) http://pastebin.com/1MudDima google走迷宫(进一步理解)
- 类似题,但是要分开预处理neighbors:因为不是逐行扫描做选择,而是路径根据初始点四个方向做dfs
class Solution(object):
def maxKilledEnemies(self, grid):
"""
:type grid: List[List[str]]
:rtype: int
"""
m=len(grid)
if m==0: return 0
n=len(grid[0])
rowcount, colcounts= 0, [0]*n
maxCount = 0
for i in xrange(m):
for j in xrange(n):
if j==0 or grid[i][j-1]=='W':
rowcount, k = 0, j
while k<n and grid[i][k]!='W':
rowcount+=(grid[i][k]=='E')
k+=1
if i==0 or grid[i-1][j]=='W':
colcounts[j], k = 0, i
while k<m and grid[k][j]!='W':
colcounts[j]+=(grid[k][j]=='E')
k+=1
if grid[i][j]=='0':
maxCount = max(maxCount, rowcount+colcounts[j])
return maxCount
sol = Solution()
assert sol.maxKilledEnemies(["0E00","E0WE","0E00"])==3, "max killed is 3"