Leetcode 1314.矩阵区域和(Matrix Block Sum)

Leetcode 1314.矩阵区域和

1 题目描述(Leetcode题目链接

  给你一个 m ∗ n m * n mn 的矩阵 mat 和一个整数 K ,请你返回一个矩阵 answer ,其中每个 a n s w e r [ i ] [ j ] answer[i][j] answer[i][j] 是所有满足下述条件的元素 m a t [ r ] [ c ] mat[r][c] mat[r][c] 的和:

  • i − K ≤ r ≤ i + K , j − K ≤ c ≤ j + K i - K \le r \le i + K, j - K \le c \le j + K iKri+K,jKcj+K
  • ( r , c ) (r, c) (r,c) 在矩阵内。
输入:mat = [[1,2,3],[4,5,6],[7,8,9]], K = 1
输出:[[12,21,16],[27,45,33],[24,39,28]]
输入: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

2 题解

  先记录矩阵前缀和,多加个一行一列方便处理边界,然后根据每个点计算它的左上边界和右下边界再计算answer的值,具体可参考第304题

class Solution:
    def matrixBlockSum(self, mat: List[List[int]], K: int) -> List[List[int]]:
        m = len(mat)
        n = len(mat[0])
        matrix = [([0]*(n+1)) for _ in range(m+1)]
        res = [([0]*n) for _ in range(m)]
        for i in range(1, m+1):
            for j in range(1, n+1):
                matrix[i][j] = matrix[i-1][j] + matrix[i][j-1] + mat[i-1][j-1] - matrix[i-1][j-1]

        for i in range(m):
            for j in range(n):
                row1, col1 = max(i - K, 0), max(j - K, 0)
                row2, col2 = min(i + K, m - 1), min(j + K, n - 1)
                res[i][j] = matrix[row2+1][col2+1] - matrix[row2+1][col1] - matrix[row1][col2+1] + matrix[row1][col1]
        return res
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值