Advertisement
serega1112

1314

Jan 25th, 2021
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.10 KB | None | 0 0
  1. class Solution:
  2.     def matrixBlockSum(self, mat: List[List[int]], K: int) -> List[List[int]]:
  3.         n = len(mat)
  4.         m = len(mat[0])
  5.         pref = [[0] * m for _ in range(n)]
  6.         pref[0][0] = mat[0][0]
  7.        
  8.         for i in range(1, m):
  9.             pref[0][i] = pref[0][i-1] + mat[0][i]
  10.        
  11.         for i in range(1, n):
  12.             pref[i][0] = pref[i-1][0] + mat[i][0]
  13.            
  14.         for i in range(1, n):
  15.             for j in range(1, m):
  16.                 pref[i][j] = pref[i][j-1] + pref[i-1][j] - pref[i-1][j-1] + mat[i][j]
  17.                
  18.         answer = [[0] * m for _ in range(n)]
  19.        
  20.         for i in range(n):
  21.             for j in range(m):
  22.                 x1 = max(i-K, 0)
  23.                 x2 = min(i+K, n-1)
  24.                 y1 = max(j-K, 0)
  25.                 y2 = min(j+K, m-1)
  26.                 left = pref[x2][y1-1] if y1 > 0 else 0
  27.                 top = pref[x1-1][y2] if x1 > 0 else 0
  28.                 cross = pref[x1-1][y1-1] if x1 > 0 and y1 > 0 else 0
  29.                 answer[i][j] = pref[x2][y2] - left - top + cross
  30.                
  31.         return answer
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement