題目連結:
題目意譯:
給定一個二維矩陣 matrix,請處理多筆以下類型的詢問:
計算矩陣中以左上角 (row1, col1) 和右下角 (row2, col2) 定義之矩形內的元素和。
實作類別 NumMatrix:
NumMatrix(int[][] matrix) 初始化物件有著整數矩陣 matrix 。
int sumRegion(int row1, int col1, int row2, int col2) 回傳矩陣中以左上角 (row1, col1) 和右下角 (row2, col2) 定義之矩形內的元素和。
限制:
m == matrix.length
n == matrix[i].length
1 ≦ m 、 n ≦ 200
-10 ^ 5 ≦ matrix[i][j] ≦ 10 ^ 5
0 ≦ row1 ≦ row2 < m
0 ≦ col1 ≦ col2 < n
最多 10 ^ 4 次呼叫為 sumRegion 。
範例測資:
輸入
["NumMatrix", "sumRegion", "sumRegion", "sumRegion"]
[[[[3, 0, 1, 4, 2], [5, 6, 3, 2, 1], [1, 2, 0, 1, 5], [4, 1, 0, 1, 7], [1, 0, 3, 0, 5]]], [2, 1, 4, 3], [1, 1, 2, 2], [1, 2, 2, 4]]
輸出
[null, 8, 11, 12]
解釋
NumMatrix numMatrix = new NumMatrix([[3, 0, 1, 4, 2], [5, 6, 3, 2, 1], [1, 2, 0, 1, 5], [4, 1, 0, 1, 7], [1, 0, 3, 0, 5]]);
numMatrix.sumRegion(2, 1, 4, 3); // 回傳 8 (即紅色矩形部分之總和)
numMatrix.sumRegion(1, 1, 2, 2); // 回傳 11 (即綠色矩形部分之總和)
numMatrix.sumRegion(1, 2, 2, 4); // 回傳 12 (即藍色矩形部分之總和)
解題思維:
前綴和(Prefix Sums)的二維版本,可以參見一維版本(
這題)以及三維版本(
這題)。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。