304. Range Sum Query 2D - Immutable LeetCode

来源:互联网 发布:mac dwg文件怎么打开 编辑:程序博客网 时间:2024/05/18 08:06

题意:给一个数字二维矩阵,求左上角(x1,y1)到右下角(x2,y2)的矩形的数字和。
题解:dp[i][j]表示0,0到i,j的矩阵数字之和。那么query的时候就容斥原理,query(x1,y1,x2,y2) = dp[x2][y2] - dp[x1][y2] - dp[x2][y1] + dp[x1][y1];

class NumMatrix {public:    vector<vector<int>> sum;    NumMatrix(vector<vector<int>> &matrix) {        int n = matrix.size();        if(n == 0) return;        int m = matrix[0].size();        vector<int> ini;        for(int i = 0; i <= m; i++)            ini.push_back(0);        for(int i = 0; i <= n; i++)            sum.push_back(ini);        for(int i = 0; i < n; i++)            for(int j = 0; j < m; j++)                sum[i + 1][j + 1] = sum[i + 1][j] + sum[i][j + 1] - sum[i][j] + matrix[i][j];    }    int sumRegion(int row1, int col1, int row2, int col2) {        row1++,col1++,row2++,col2++;        return sum[row2][col2] - sum[row2][col1 - 1] - sum[row1 - 1][col2] + sum[row1 - 1][col1 - 1];    }};
0 0
原创粉丝点击