2022-7-23 剑指offer-二维前缀和

剑指 Offer II 013. 二维子矩阵的和

难度中等

给定一个二维矩阵 matrix以下类型的多个请求:

  • 计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2) 。

实现 NumMatrix 类:

  • NumMatrix(int[][] matrix) 给定整数矩阵 matrix 进行初始化
  • int sumRegion(int row1, int col1, int row2, int col2) 返回左上角 (row1, col1) 、右下角 (row2, col2) 的子矩阵的元素总和。
 1 class NumMatrix {
 2     int[][] sum;
 3     public NumMatrix(int[][] matrix) {
 4         int m=matrix.length,n=matrix[0].length;
 5         sum=new int[m+1][n+1];
 6         for (int i=1;i<=m;i++){
 7             for (int j=1;j<=n;j++){
 8                 sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+matrix[i-1][j-1];
 9                 //System.out.println(sum[i][j]);
10             }
11         }
12     }
13     
14     public int sumRegion(int row1, int col1, int row2, int col2) {
15         return sum[row2+1][col2+1]-sum[row1][col2+1]-sum[row2+1][col1]+sum[row1][col1];
16     }
17 }
18 
19 /**
20  * Your NumMatrix object will be instantiated and called as such:
21  * NumMatrix obj = new NumMatrix(matrix);
22  * int param_1 = obj.sumRegion(row1,col1,row2,col2);
23  */

思路:二维前缀和,可以扩容一层为了计算方便。

posted on 2022-07-23 13:49  阿ming  阅读(15)  评论(0编辑  收藏  举报

导航