1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| import java.util.ArrayList;
public class NumMatrix {
int[][] matrix; public NumMatrix(int[][] matrix) { int n = matrix.length; int m = matrix[0].length;
if (matrix == null || matrix.length == 0){ return ; } this.matrix = new int[n][m]; for(int i=0; i<n; i++){ for (int j=0; j<m; j++){ if (i==0 && j==0){ this.matrix[i][j] = matrix[i][j]; } else if (i == 0){ this.matrix[i][j] = matrix[i][j] + this.matrix[i][j-1]; } else if (j == 0){ this.matrix[i][j] = matrix[i][j] + this.matrix[i-1][j]; } else{ this.matrix[i][j] = matrix[i][j] + this.matrix[i-1][j] + this.matrix[i][j-1] - this.matrix[i-1][j-1]; } } }
} public int sumRegion(int row1, int col1, int row2, int col2) { if (col1 == 0 && row1 == 0){ return matrix[row2][col2]; } else if (col1 == 0){ return matrix[row2][col2] - matrix[row1-1][col2]; } else if (row1 == 0){ return matrix[row2][col2] - matrix[row2][col1-1]; } else return matrix[row2][col2] - matrix[row2][col1-1] - matrix[row1-1][col2] + matrix[row1-1][col1-1]; } }
|