理解题目意思 如下图例子
算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2) 。
二维数组,
// 二维矩阵,求子矩阵的各项和
var NumMatrix = function (matrix) {
var [m, n] = [matrix.length, matrix[0].length];
var dp = Array.from({ length: m }, () => new Array(n + 1).fill(0));
for (var i = 0; i < m; i++) {
for (var j = 0; j < n; j++) {
dp[i][j + 1] = dp[i][j] + matrix[i][j];
}
}
this.dp = dp;
};
NumMatrix.prototype.sumRegion = function (row1, col1, row2, col2) {
var dp = this.dp;
var sum = 0;
for (var i = row1; i <= row2; i++) {
sum += dp[i][col2 + 1] - dp[i][col1];
}
return sum;
};
代码调试
var arr = [
[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],
];
var numMatrix =new NumMatrix(arr);
numMatrix.sumRegion(2, 1, 4, 3); // return 8 (红色矩形框的元素总和)
numMatrix.sumRegion(1, 1, 2, 2); // return 11 (绿色矩形框的元素总和)
numMatrix.sumRegion(1, 2, 2, 4); // return 12 (蓝色矩形框的元素总和)