Leecode 1314. 矩阵区域和 二维前缀和

原题链接:Leecode 1314. 矩阵区域和
Leecode 1314. 矩阵区域和 二维前缀和_第1张图片

class Solution {
public:
    vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int k) {
        int m=mat.size(),n=mat[0].size();
        vector<vector<int>> sum(m+1,vector<int>(n+1));
        vector<vector<int>> res(m,vector<int>(n));
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                sum[i+1][j+1]=sum[i+1][j]+sum[i][j+1]-sum[i][j]+mat[i][j];
            }
        }
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                int u= i-k>=0 ? i-k:0;
                int d= i+k<m ? i+k:m-1;
                int l= j-k>=0 ? j-k:0;
                int r= j+k<n ? j+k:n-1;
                res[i][j]=sum[d+1][r+1]-sum[d+1][l]-sum[u][r+1]+sum[u][l];
            }
        }
        return res;
    }
};

你可能感兴趣的:(Leetcode,矩阵,leetcode,算法,c++)