问题
https://leetcode.com/problems/range-sum-query-2d-immutable/
解法
先预计算出(0, 0) ~(i,j)矩形的和, 复杂度O(n*m)
任意矩形可以使用O(1)时间求得
class NumMatrix {
public:
NumMatrix(vector<vector<int>> &matrix) {
_isEmpty = (matrix.size() == 0 || matrix[0].size() == 0);
if (_isEmpty)
return;
for (int i=0; i<= matrix.size(); ++i)
_sum.push_back(vector<long long int>(matrix[0].size()+1, 0));
for (int i=1; i<_sum.size(); ++i)
{
for (int j=1; j<_sum[i].size(); ++j)
{
_sum[i][j] = (_sum[i][j-1] + _sum[i-1][j] + matrix[i-1][j-1] - _sum[i-1][j-1]);
}
}
}
int sumRegion(int row1, int col1, int row2, int col2) {
if (_isEmpty)
return 0;
++row2;
++col2;
return _sum[row2][col2] - _sum[row1][col2] -_sum[row2][col1] + _sum[row1][col1];
}
private:
vector<vector<long long int>> _sum;
bool _isEmpty;
};
// Your NumMatrix object will be instantiated and called as such:
// NumMatrix numMatrix(matrix);
// numMatrix.sumRegion(0, 1, 2, 3);
// numMatrix.sumRegion(1, 2, 3, 4);