Introduction
Question: 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, 0, 1, 5], [4, 1, 0, 1, 7], [1, 0, 3, 0, 5] ] sumRegion(2, 1, 4, 3) -> 8 sumRegion(1, 1, 2, 2) -> 11 sumRegion(1, 2, 2, 4) -> 12
提示:
- 你可以假设矩阵不可变。
- 会多次调用
sumRegion方法。 - 你可以假设
row1 ≤ row2且col1 ≤ col2。
解法一
Analysis
和 LC303-range-sum-query-immutable 类似,相当于是他的扩展。
基本就两条公式的事情:
sum[0:i+1][0:j+1] = sum[0:i][0:j+1] + sum[0:i+1][0:j] - sum[0:i][0:j]sumRange(r1,c1,r2,c2) = sum[0:r2+1][0:c2+1] + sum[0:r1][0:c1] - sum[0:r2+1][0:c1] - sum[0:r1][0:c2+1]
Implement
1 | class NumMatrix { |