class NumMatrix {
public:
NumMatrix(vector<vector<int>> matrix) {
if (matrix.size() == 0 || matrix[0].size() == 0)
return;
sumArray = matrix;
for (int i = 0; i < matrix.size(); i++) {
int sum = 0;
for (int j = 0; j < matrix[0].size(); j++) {
sum += matrix[i][j];
sumArray[i][j] = sum;
}
}
for (int j = 0; j < matrix[0].size(); j++) {
int sum = 0;
for (int i = 0; i < matrix.size(); i++) {
sum += sumArray[i][j];
sumArray[i][j] = sum;
}
}
}
int sumRegion(int row1, int col1, int row2, int col2) {
if (sumArray.size() == 0 || sumArray[0].size() == 0)
return 0;
int r1 = 0;
int r2 = 0;
int r3 = 0;
if (row1 > 0) {
r1 = sumArray[row1 -1][col2];
}
if (col1 > 0) {
r2 = sumArray[row2][col1 - 1];
}
if (row1 > 0 && col1 > 0) {
r3 = sumArray[row1 -1][col1 - 1];
}
int sub = r1 + r2 - r3;
return sumArray[row2][col2] - sub;
}
private:
vector<vector<int>> sumArray;
};
留言
張貼留言