Steward
分享是一種喜悅、更是一種幸福
程式語言 - LeetCode - C++ - 304. Range Sum Query 2D - Immutable
題目:

方法:
建表公式
prefix[i][j] =
prefix[i − 1][j + 0] +
prefix[i + 0][j − 1] −
prefix[i − 1][j − 1] +
matrix[i − 1][j − 1]
查詢公式
sumRegion =
prefix[r2 + 1][c2 + 1] −
prefix[r1 + 0][c2 + 1] −
prefix[r2 + 1][c1 + 0] +
prefix[r1 + 0][c1 + 0]
解答:
class NumMatrix {
private:
vector<vector<int>> sum;
public:
NumMatrix(vector<vector<int>>& matrix) {
int m = matrix.size();
int n = matrix[0].size();
sum.resize(m + 1, vector<int>(n + 1, 0));
for (int i = 1; i <= m; ++i) {
for (int j = 1; j <= n; ++j) {
sum[i][j] =
sum[i - 1][j] +
sum[i][j - 1] -
sum[i - 1][j - 1] +
matrix[i - 1][j - 1];
}
}
}
int sumRegion(int row1, int col1, int row2, int col2) {
return sum[row2 + 1][col2 + 1] -
sum[row1][col2 + 1] -
sum[row2 + 1][col1] +
sum[row1][col1];
}
};
/**
* Your NumMatrix object will be instantiated and called as such:
* NumMatrix* obj = new NumMatrix(matrix);
* int param_1 = obj->sumRegion(row1,col1,row2,col2);
*/