(力扣)1314.矩阵区域和

给你一个 m x n 的矩阵 mat 和一个整数 k ,请你返回一个矩阵 answer ,其中每个 answer[i][j] 是所有满足下述条件的元素 mat[r][c] 的和: 

  • i - k <= r <= i + k,
  • j - k <= c <= j + k 且
  • (r, c) 在矩阵内。

示例 1:

输入:mat = [[1,2,3],[4,5,6],[7,8,9]], k = 1
输出:[[12,21,16],[27,45,33],[24,39,28]]

示例 2:

输入:mat = [[1,2,3],[4,5,6],[7,8,9]], k = 2
输出:[[45,45,45],[45,45,45],[45,45,45]]

提示:

  • m == mat.length
  • n == mat[i].length
  • 1 <= m, n, k <= 100
  • 1 <= mat[i][j] <= 100

此题可以用前缀和来做,但是比较难点儿的是边界不好控制!!接下来看看代码吧~

class Solution {
public:
vector<vector<int>> sums;
    vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int k) {
        int rlen=mat.size(),clen=mat[0].size();
        sums.resize(rlen+1,vector<int>(clen+1));//初始化空间
        for(int i=1;i<=rlen;i++){
            for(int j=1;j<=clen;j++){
                sums[i][j]=sums[i-1][j]+sums[i][j-1]-sums[i-1][j-1]+mat[i-1][j-1];//求前缀和
            }
        }
        vector<vector<int>> res(rlen,vector<int>(clen));//此处一定要初始化空间,否则报空指针
        for(int i=0;i<rlen;i++){
            for(int j=0;j<clen;j++){
                // 分别获取左上角和右下角的坐标
                int r1=max(i-k,0),c1=max(j-k,0);
                int r2=min(i+k,rlen-1),c2=min(j+k,clen-1);
                // 通过二维前缀和公式获取某个区间内的和
                res[i][j]=sums[r2+1][c2+1]-sums[r2+1][c1]-sums[r1][c2+1]+sums[r1][c1];
            }
        }
        return res;
    }
};

提交通过!

相关推荐

  1. 每日OJ题_算法_前缀⑧_1314. 矩阵区域

    2024-02-08 08:30:03       56 阅读
  2. 每日一题:Leetcode1314.矩阵区域

    2024-02-08 08:30:03       58 阅读
  3. 134. 加油站

    2024-02-08 08:30:03       57 阅读
  4. 134.加油站

    2024-02-08 08:30:03       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-08 08:30:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-08 08:30:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-08 08:30:03       82 阅读
  4. Python语言-面向对象

    2024-02-08 08:30:03       91 阅读

热门阅读

  1. Linux增删ip

    2024-02-08 08:30:03       43 阅读
  2. Leetcode 139 单词拆分

    2024-02-08 08:30:03       53 阅读
  3. 基于3DGIS 的5G 基站规划创新

    2024-02-08 08:30:03       46 阅读
  4. 1971 - 大小写转换

    2024-02-08 08:30:03       50 阅读
  5. Rust-AI todo list 开发体验

    2024-02-08 08:30:03       52 阅读
  6. Vista —— a magazine I will read along the rest of my life

    2024-02-08 08:30:03       48 阅读