【LeetCode】304. 二维区域和检索 - 矩阵不可变

class NumMatrix {
public:

    vector<vector<int>> sums;

    NumMatrix(vector<vector<int>>& matrix) {
        int m = matrix.size();
        if(m>0)
        {
            int n = matrix[0].size();
            sums.resize(m+1,vector<int>(n+1)); //1个容量为m+1行,n+1列的2维数组
            for(int i=0;i<m;++i)
            {
                for(int j=0;j<n;++j)
                {
                    sums[i+1][j+1]=-sums[i][j]+sums[i][j+1]+sums[i+1][j]+matrix[i][j];
                }
            }
        }

    }
    
    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];
    }
};

注意二维前缀和的生成,和二维和的生成。

posted @ 2022-02-05 20:35  Jerry2km1  阅读(34)  评论(0)    收藏  举报