题目
解题思路:
首先生成辅助数组sum,数组中的每个位置代表(0,0)与当前坐标之间的区域和(sum数组行列数均比matrix+1,方便处理边界)。
核心思想:
(R1,C1)与(R2,C2)区域和= sum[R2+1][C2+1]-sum[R1][C2+1]-sum[R2+1][C1]+sum[R1][C1]
代码记录
class NumMatrix:
def __init__(self, matrix: List[List[int]]):
self.matrix=matrix
if matrix:
self.rows_num=len(matrix)
self.cols_num=len(matrix[0])
self.sum=[[0 for i in range(self.cols_num+1)] for j in range(self.rows_num+1)]
self._compute_sum()
def _compute_sum(self):
for i in range(1,self.rows_num+1):
for j in range(1,self.cols_num+1):
self.sum[i][j]=self.sum[i][j-1]+self.sum[i-1][j]-self.sum[i-1][j-1]+self.matrix[i-1][j-1]
def sumRegion(self, row1: int, col1: int, row2: int, col2: int) -> int:
if not self.matrix:
return 0
else:
return self.sum[row2+1][col2+1]-self.sum[row1][col2+1]-self.sum[row2+1][col1]+self.sum[row1][col1]