LeetCode 1314. 矩阵区域和

本文介绍了一种使用动态规划解决LeetCode上矩阵块求和问题的方法。该问题要求计算矩阵中每个元素为中心的k*k区域内的元素之和。文章提供了一个O(m*n)时间复杂度的解决方案,并附带详细的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


题目描述

给你一个 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]]


原题连接
链接:https://leetcode-cn.com/problems/matrix-block-sum/


一、基础框架

    public int[][] matrixBlockSum(int[][] mat, int k) {

    }

二、解题报告

1.思路分析

1、二维数组
2、动态规划
3、数组和相加 并减去重复的值

2.时间复杂度

时间复杂度 O ( m*n )

3.代码示例

tips:

        public int[][] matrixBlockSum(int[][] mat, int k) {
        int row = mat.length,col = mat[0].length;
        int [][] ans = new int[row ][col];
        //为了保证处于边界的前缀和计算方式一致,初始化为 row + 1 & col + 1;然后从下标1 开始计算
        int [][] sum = new int[row + 1][col + 1];
        for(int i = 1; i <= row; i ++){
            for(int j = 1;j <= col;j++){
                sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + mat[i - 1][j - 1];
            }
        }
        for(int i = 0; i < row;i++){
            for(int j = 0;j < col;j++){
                //处理新坐标 防止越界
                int l1 = i -k <= 0 ? 1 : i -k +1;//mat i的最小值
                int r1 = i + k >= row - 1 ? row : i + k + 1;//mat i的最大值
                int l2 = j - k <= 0 ? 1 :j - k +1;//mat j的最小值
                int r2 = j + k >= col - 1 ? col :j + k + 1; //mat中的j的最大值
                ans[i][j] = sum[r1][r2] - sum[l1 -1][r2] - sum[r1][l2 - 1] + sum[l1 - 1][l2 - 1];
            }
        }

        return ans;
    }

2.知识点

1、很经典的动态规划题
2、注意问题的分解和转换

总结

动态规划有从顶向下 & 从下向上 注意学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大涛小先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值