思路和一维的一样:
首先计算result,求出每一行的所有区间和。
然后累加【row1,row2】区间内每一行的和。
class NumMatrix {
private int[][] result;
public NumMatrix(int[][] matrix) {
int row = matrix.length;
if(row == 0){
return;
}
int col = matrix[0].length;
result = new int[row][col];
for (int i = 0; i < row; i ++){
for (int j = 0; j < col; j ++){
if (j == 0){
result[i][j] = matrix[i][j];
}else {
result[i][j] = matrix[i][j] + result[i][j-1];
}
}
}
}
public int sumRegion(int row1, int col1, int row2, int col2) {
int sum = 0;
if (col1 == 0){
for (int i = row1; i <= row2; i++){
sum += result[i][col2];
}
}else {
for (int i = row1; i <= row2; i++) {
sum += result[i][col2] - result[i][col1 - 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);
*/