class NumMatrix(object):
"""
we need two steps to solve this question
step:
calc out the acreage of rectangle whose top left point is origin and bottom right point is (i,j)
we need use dynamic programming to get the matrix
dp[i][j] = dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1](dp[i-1][j-1] is extra area add to the result)
"""
def __init__(self, matrix):
"""
:type matrix: List[List[int]]
"""
if len(matrix) == 0 or len(matrix[0]) == 0:
return
self.dp = [[0 for j in range(len(matrix[0])+1)] for i in range(len(matrix)+1)]
for i in range(1,len(self.dp)):
for j in range(1, len(self.dp[0])):
self.dp[i][j] += self.dp[i-1][j] + self.dp[i][j-1] - self.dp[i-1][j-1] + matrix[i-1][j-1]
def sumRegion(self, row1, col1, row2, col2):
"""
:type row1: int
:type col1: int
:type row2: int
:type col2: int
:rtype: int
"""
return self.dp[row2+1][col2+1] - self.dp[row1][col2+1] - self.dp[row2+1][col1] + self.dp[row1][col1]
【Leeetcode】304. Range Sum Query 2D - Immutable
最新推荐文章于 2024-08-08 07:21:37 发布