给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2)。
示例:
给定 matrix = [
[3, 0, 1, 4, 2],
[5, 6, 3, 2, 1],
[1, 2, 0, 1, 5],
[4, 1, 0, 1, 7],
[1, 0, 3, 0, 5]
]
sumRegion(2, 1, 4, 3) -> 8
sumRegion(1, 1, 2, 2) -> 11
sumRegion(1, 2, 2, 4) -> 1
难度: 中等
算法思路: 蛮力求解
class NumMatrix {
int[][] matrix;
public NumMatrix(int[][] matrix) {
this.matrix = matrix;
}
public int sumRegion(int row1, int col1, int row2, int col2) {
if(row1 < 0 || row1 >= matrix.length || col1 < 0 || col1 >= matrix[0].length
|| row2 < 0 || row2 >= matrix.length || col2 < 0 || col2 >= matrix[0].length){
return -1;
}
if (matrix == null) {
return 0;
}
if(row1 == row2 && col1 == col2){
return matrix[row1][col1];
}
int sum = 0;
for (int i = row1; i <= row2; i++) {
for (int j = col1; j <= col2; j++) {
sum += matrix[i][j];
}
}
return sum;
}
}
执行用时:164 ms, 在所有 Java 提交中击败了5.14% 的用户
内存消耗:44.1 MB, 在所有 Java 提交中击败了51.90% 的用户