0%

304. Range Sum Query 2D - Immutable

304. Range Sum Query 2D - Immutable

dp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class NumMatrix {
public:
NumMatrix(vector<vector<int>>& matrix) : dp(vector<vector<int>>(matrix.size() + 1, vector<int>(matrix[0].size() + 1, 0))), rows(matrix.size()), cols(matrix[0].size()) {
for(int i = 1; i < rows + 1; ++i)
{
for(int j = 1; j < cols + 1; ++j)
{
dp[i][j] = matrix[i - 1][j - 1] + dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1];
}
}
}

int sumRegion(int row1, int col1, int row2, int col2) {
return dp[row2 + 1][col2 + 1] - dp[row1][col2 + 1]- dp[row2 + 1][col1] + dp[row1][col1];
}
private:
vector<vector<int>> dp;
int rows, cols;
};

/**
* Your NumMatrix object will be instantiated and called as such:
* NumMatrix* obj = new NumMatrix(matrix);
* int param_1 = obj->sumRegion(row1,col1,row2,col2);
*/

大小加一时为了防止下标越界

1621411468268.png