2
* @param {number[][]} matrix4
var NumMatrix = function (matrix) {5
const n = matrix.length,8
this.prefix = Array.from({ length: n }, (_, i) => {9
return new Array(m).fill(0);11
const prefix = this.prefix;13
for (let i = 0; i < m; i++) {14
if (i == 0) prefix[0][i] = matrix[0][i];15
else prefix[0][i] = prefix[0][i - 1] + matrix[0][i];17
for (let i = 0; i < n; i++) {19
else prefix[i][0] = prefix[i - 1][0] + matrix[i][0];22
for (let i = 1; i < n; i++) {23
for (let j = 1; j < m; j++) {27
prefix[i - 1][j - 1] +34
* @param {number} row135
* @param {number} col136
* @param {number} row237
* @param {number} col240
NumMatrix.prototype.sumRegion = function (row1, col1, row2, col2) {41
const prefix = this.prefix;42
const biggerRectSum = prefix[row2][col2];43
if (row1 == col1 && row1 == 0) return biggerRectSum;44
if (row1 == 0 || col1 == 0) {45
let subtractRegion = 0;46
if (row1 == 0) subtractRegion = prefix[row2][col1 - 1];47
else subtractRegion = prefix[row1 - 1][col2];48
return biggerRectSum - subtractRegion;52
prefix[row1 - 1][col2] -53
prefix[row2][col1 - 1] +54
prefix[row1 - 1][col1 - 1]59
* Your NumMatrix object will be instantiated and called as such:60
* var obj = new NumMatrix(matrix)61
* var param_1 = obj.sumRegion(row1,col1,row2,col2)