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

思路有了,就是不知道为什么调不出来……太晚了先歇吧。

在这里插入图片描述

制作一个二维的前缀和,前缀和矩阵要比原有矩阵大一层,全部为0,这一层不影响前缀和。

计算的过程就是四个矩阵互相加减,在本上画画就懂了。

class NumMatrix {
    
    
    int[][] sums;

    public NumMatrix(int[][] matrix) {
    
    
        int m = matrix.length;
        if (m > 0) {
    
    
            int n = matrix[0].length;
            sums = new int[m + 1][n + 1];
            for (int i = 0; i < m; i++) {
    
    
                for (int j = 0; j < n; j++) {
    
    
                    sums[i + 1][j + 1] = sums[i][j + 1] + sums[i + 1][j] - sums[i][j] + matrix[i][j];
                }
            }
        }
    }
    
    public int sumRegion(int row1, int col1, int row2, int col2) {
    
    
        return sums[row2 + 1][col2 + 1] - sums[row1][col2 + 1] - sums[row2 + 1][col1] + sums[row1][col1];
    }
}

猜你喜欢

转载自blog.csdn.net/qq_37772958/article/details/121846655