给定一个二维矩阵 matrix,以下类型的多个请求:

    计算其子矩形范围内元素的总和,该子矩阵的 左上角 为 (row1, col1) ,右下角 为 (row2, col2) 。
    实现 NumMatrix 类:

    NumMatrix(int[][] matrix) 给定整数矩阵 matrix 进行初始化
    int sumRegion(int row1, int col1, int row2, int col2) 返回 左上角 (row1, col1) 、右下角 (row2, col2) 所描述的子矩阵的元素 总和 。

    示例 1:
    image.png
    输入:
    [“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); // return 8 (红色矩形框的元素总和)
    numMatrix.sumRegion(1, 1, 2, 2); // return 11 (绿色矩形框的元素总和)
    numMatrix.sumRegion(1, 2, 2, 4); // return 12 (蓝色矩形框的元素总和)

    1. /**
    2. * @param {number[][]} matrix
    3. */
    4. var NumMatrix = function (matrix) {
    5. const m = matrix.length;
    6. if (m > 0) {
    7. const n = matrix[0].length;
    8. this.sums = new Array(m).fill(0).map(() => new Array(n + 1).fill(0));
    9. for (let i = 0; i < m; i++) {
    10. for (let j = 0; j < n; j++) {
    11. this.sums[i][j + 1] = this.sums[i][j] + matrix[i][j];
    12. }
    13. }
    14. }
    15. };
    16. /**
    17. * @param {number} row1
    18. * @param {number} col1
    19. * @param {number} row2
    20. * @param {number} col2
    21. * @return {number}
    22. */
    23. NumMatrix.prototype.sumRegion = function (row1, col1, row2, col2) {
    24. let sum = 0;
    25. for (let i = row1; i <= row2; i++) {
    26. sum += this.sums[i][col2 + 1] - this.sums[i][col1];
    27. }
    28. return sum;
    29. };
    30. /**
    31. * Your NumMatrix object will be instantiated and called as such:
    32. * var obj = new NumMatrix(matrix)
    33. * var param_1 = obj.sumRegion(row1,col1,row2,col2)
    34. */

    image.png