解析:class
nummatrix
:def
__init__
(self, matrix: list[list[
int]])
:ifnot matrix or
not matrix[0]
:pass
else
: row =
len(matrix)
col =
len(matrix[0]
)# 初始化行列都為0,且row+1,col+1
self.dp =[[
0]*(col +1)
for _ in
range
(row +1)
]# 求行的字首和
for i in
range(1
, row +1)
:for j in
range(1
,col +1)
: self.dp[i]
[j]= self.dp[i]
[j -1]
+ matrix[i -1]
[j -1]
# 求列的字首和
for j in
range(1
, col +1)
:for i in
range(1
, row +1)
: self.dp[i]
[j]+= self.dp[i -1]
[j]# 上面可以直接簡寫成如下
""" for i in range(1, row + 1):
for j in range(1, col + 1):
self.dp[i][j] = matrix[i - 1][j - 1] + self.dp[i - 1][j] + self.dp[i][j - 1] - self.dp[i-1][j-1]
"""defsumregion
(self, row1:
int, col1:
int, row2:
int, col2:
int)
->
int:
return self.dp[row2 +1]
[col2 +1]
- self.dp[row1]
[col2 +1]
- self.dp[row2 +1]
[col1]
+ self.dp[row1]
[col1]
# your nummatrix object will be instantiated and called as such:
# obj = nummatrix(matrix)
# param_1 = obj.sumregion(row1,col1,row2,col2)
是3.1字首和維度的公升級,先求行,列的字首和得到陣列中元素左上角的所有元素的和,再利用所得的新陣列進行運算處理。
Leetcode 304 二維區域和檢索
給定乙個二維矩陣,計算其子矩形範圍內元素的總和,該子矩陣的左上角為 row1,col1 右下角為 row2,col2 上圖子矩陣左上角 row1,col1 2,1 右下角 row2,col2 4,3 該子矩形內元素的總和為 8。示例 給定 matrix 3,0,1,4,2 5,6,3,2,1 1,2...
leetcode304 二維區域和檢索 矩陣不可變
給定乙個二維矩陣,計算其子矩形範圍內元素的總和,該子矩陣的左上角為 row1,col1 右下角為 row2,col2 上圖子矩陣左上角 row1,col1 2,1 右下角 row2,col2 4,3 該子矩形內元素的總和為 8。給定 matrix 3,0,1,4,2 5,6,3,2,1 1,2,0,...
304 二維區域和檢索 矩陣不可變
題目描述 給定乙個二維矩陣,計算其子矩形範圍內元素的總和,該子矩陣的左上角為 row1,col1 右下角為 row2,col2 30 1425 6321 1201 5410 1710 305 上圖子矩陣左上角 row1,col1 2,1 右下角 row2,col2 4,3 該子矩形內元素的總和為 8...