原题地址(中等)
方法1—前缀和
思路
和303题类似的思路,不难。
官解:https://leetcode-cn.com/problems/range-sum-query-2d-immutable/solution/er-wei-qu-yu-he-jian-suo-ju-zhen-bu-ke-b-2z5n/
代码
class NumMatrix {
public:
vector<vector<int>> sumV;
NumMatrix(vector<vector<int>>& matrix) {
sumV = matrix;
int row = sumV.size(), col;
if(row == 0) col = 0;
else col = sumV[0].size();
for(int i = 0; i < row; i++) {
for(int j = 0; j < col; j++) {
if(j > 0) sumV[i][j] += sumV[i][j-1];
if(i > 0) sumV[i][j] += sumV[i-1][j];
if(i > 0 && j > 0) sumV[i][j] -= sumV[i-1][j-1];
}
}
}
int sumRegion(int row1, int col1, int row2, int col2) {
int ans = sumV[row2][col2];
if(row1 > 0) ans -= sumV[row1-1][col2];
if(col1 > 0) ans -= sumV[row2][col1-1];
if(row1 > 0 && col1 > 0) ans += sumV[row1-1][col1-1];
return ans;
}
};
时空复杂度
时间:初始化O(mn) 检索O(1) 空间:O(mn)