정수 행렬과 사각형의 좌상단, 우하단 두 점이 주어 진다.
행렬 내에서 사각형 영역의 합을 구하는 문제
class NumMatrix {
public:
vector<vector<int>> prefixMatrix{};
NumMatrix(vector<vector<int>>& matrix) {
int n = matrix.size();
int m = matrix[0].size();
prefixMatrix.resize(n + 1, vector<int>(m + 1));
for (int i = 0; i < n ; i++)
{
for (int j = 0; j < m; j++)
{
prefixMatrix[i + 1][j + 1] = matrix[i][j]
+ prefixMatrix[i][j + 1]
+ prefixMatrix[i + 1][j]
- prefixMatrix[i][j];
}
}
}
int sumRegion(int row1, int col1, int row2, int col2) {
int sum = prefixMatrix[row2 + 1][col2 + 1]
+ prefixMatrix[row1][col1]
- prefixMatrix[row2 + 1][col1]
- prefixMatrix[row1][col2 + 1];
return sum;
}
};
/**
* Your NumMatrix object will be instantiated and called as such:
* NumMatrix* obj = new NumMatrix(matrix);
* int param_1 = obj->sumRegion(row1,col1,row2,col2);
*/