leedcode304二維區域檢索和矩陣不可變

2021-10-20 18:43:00 字數 1531 閱讀 5357

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...