2
def prefix_sum(self, grid: List[List[int]]) -> List[List[int]]:4
[grid[row][col] for col in range(len(grid[0]))] for row in range(len(grid))7
for row in range(len(grid)):8
for col in range(1, len(grid[0])):9
ps[row][col] = ps[row][col - 1] + grid[row][col]11
for row in range(1, len(grid)):12
for col in range(len(grid[0])):13
ps[row][col] = ps[row - 1][col] + ps[row][col]17
def sumRegion(self, ps, row1: int, col1: int, row2: int, col2: int) -> int:19
if row1 == 0 and col1 == 0:22
ans = ps[row2][col2] - ps[row2][col1 - 1]24
ans = ps[row2][col2] - ps[row1 - 1][col2]30
+ ps[row1 - 1][col1 - 1]35
self, grid: List[List[int]], stampHeight: int, stampWidth: int37
diff = [[0 for col in range(len(grid[0]) + 1)] for row in range(len(grid) + 1)]39
ps = self.prefix_sum(grid)42
for row in range(len(grid) - (stampHeight - 1)):43
for col in range(len(grid[0]) - (stampWidth - 1)):44
sub_sum = self.sumRegion(45
ps, row, col, row + stampHeight - 1, col + stampWidth - 149
diff[row][col + stampWidth] -= 150
diff[row + stampHeight][col] -= 151
diff[row + stampHeight][col + stampWidth] = 152
pref_diff = self.prefix_sum(diff)53
m, n = len(grid), len(grid[0])55
for row in range(len(grid)):56
for col in range(len(grid[0])):57
if grid[row][col] == 0 and pref_diff[row][col] == 0: