因为两者操作差不多,所以get和update都要O(n)
class NumMatrix: def __init__(self, matrix: List[List[int]]): if matrix is None or len(matrix) == 0 or len(matrix[0]) == 0: return m = len(matrix) n = len(matrix[0]) self.sumRow = [[0] * n for k in range(m)] # sum of row matrix[i][:j] for i in range(m): for j in range(n): if j == 0: self.sumRow[i][j] = matrix[i][j] else: self.sumRow[i][j] = self.sumRow[i][j - 1] + matrix[i][j] self.matrix = matrix def update(self, row: int, col: int, val: int) -> None: oldVal = self.matrix[row][col] n = len(self.matrix[0]) self.matrix[row][col] = val for j in range(col, n): self.sumRow[row][j] += (val - oldVal) def sumRegion(self, row1: int, col1: int, row2: int, col2: int) -> int: result = 0 for i in range(row1, row2 + 1): sumRight = self.sumRow[i][col2] if col1 > 0: sumLeft = self.sumRow[i][col1 - 1] else: sumLeft = 0 sumRow = sumRight - sumLeft result += sumRow return result # Your NumMatrix object will be instantiated and called as such: # obj = NumMatrix(matrix) # obj.update(row,col,val) # param_2 = obj.sumRegion(row1,col1,row2,col2)