[关闭]
@Yano 2016-03-21T12:34:49.000000Z 字数 1406 阅读 2777

LeetCode 304 Range Sum Query 2D - Immutable

LeetCode


Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper left corner (_row_1, _col_1) and lower right corner (_row_2, _col_2).

Range Sum Query 2D

The above rectangle (with the red border) is defined by (row1, col1) = (2, 1) and (row2, col2) = (4, 3), which contains sum = 8.

Example:

Given 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) -> 12

Note:

  1. You may assume that the matrix does not change.
  2. There are many calls to sumRegion function.
  3. You may assume that _row_1 ≤ _row_2 and _col_1 ≤ _col_2.

分析

和 303 题一样,只不过变成二维数组。那么就分别把每一行用 303 的解法。

代码

  1. public class NumMatrix {
  2. public long[][] sumMatrix;
  3. public NumMatrix(int[][] matrix) {
  4. if (matrix == null || matrix.length == 0) {
  5. return;
  6. }
  7. sumMatrix = new long[matrix.length + 1][matrix[0].length + 1];
  8. for (int i = 0; i < matrix.length; i++) {
  9. for (int j = 0; j < matrix[0].length; j++) {
  10. sumMatrix[i][j + 1] = sumMatrix[i][j] + matrix[i][j];
  11. }
  12. }
  13. }
  14. public int sumRegion(int row1, int col1, int row2, int col2) {
  15. if (sumMatrix == null || row1 < 0 || row2 < 0 || col1 < 0
  16. || col2 < 0 || row1 >= sumMatrix.length - 1
  17. || row2 >= sumMatrix.length - 1
  18. || col1 >= sumMatrix[0].length - 1
  19. || col2 >= sumMatrix[0].length - 1 || row1 > row2
  20. || col1 > col2) {
  21. return Integer.MIN_VALUE;
  22. }
  23. long rt = 0;
  24. for (int i = row1; i <= row2; i++) {
  25. rt += sumMatrix[i][col2 + 1] - sumMatrix[i][col1];
  26. }
  27. return (int) rt;
  28. }
  29. }
  30. // Your NumMatrix object will be instantiated and called as such:
  31. // NumMatrix numMatrix = new NumMatrix(matrix);
  32. // numMatrix.sumRegion(0, 1, 2, 3);
  33. // numMatrix.sumRegion(1, 2, 3, 4);
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注