Description:
https://leetcode.com/problems/continuous-subarray-sum/#/description
Boundary:
Should consider when the dimension of matirix is 0;
Algorithm:
- Because there are many calls to sumRegion() function, we should pre-store the sums instead of calculating for each time
- Should have 0 row and 0 column.
Code:
class NumMatrix {
public:
NumMatrix(vector<vector<int>> matrix) {
m = matrix.size();
n = m > 0 ? matrix[0].size():0;
sums = vector<vector<int>>(m + 1, vector<int>(n + 1, 0));
sums[1][1] = matrix[0][0];
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
sums[i + 1][j + 1] = sums[i][j + 1] + sums[i + 1][j] – sums[i][j] + matrix[i][j];
}
}
}
int sumRegion(int row1, int col1, int row2, int col2) {
return sums[row2 + 1][col2 + 1] – sums[row1][col2 + 1] – sums[row2 + 1][col1] + sums[row1][col1];
}
private:
int m, n;
vector<vector<int>> sums;
};