leetcode 1074:元素和为目标值的子矩阵数量

每日一题
今天的每日一题确实让博主我伤透脑筋 :x
闲话不多说~ 来人! 上图!
在这里插入图片描述
看完题目的我,也不准备重拳出击了,代码能过就好…

首先来分析题目
大致意思呢就是 ,他要让我们拿所有可能的子矩阵的sum值和target比较,通过计数来得出有多少子矩阵的sum值。

第一步
通过二维数组前缀和得把这个子矩阵的sum值拿到在这里插入图片描述我们把每个方块比作矩阵中的1个元素,那么这个矩阵的sum值可由 S(红色) + S(蓝色) - S(红蓝) + S(黄色对勾) 得到。这里的S就代表了子矩阵元素的sum值。
如果解释的还不够清楚,下面我附上官方解释…
在这里插入图片描述在这里插入图片描述

在这里插入图片描述第二步
通过切割得到任一子矩阵的sum值(子矩阵位置不定)
看了我的解释和官方的解释,肯定有人和我当初一样有疑惑:怎么把所有子矩阵的sum值都遍历一遍呢?
我只想到了暴力,毕竟一力降十会hhhh
对于不同位置的子矩阵,我们可以通过切割来计算它的sum值在这里插入图片描述
就比如我要求紫色对勾这个子矩阵的sum值(想象里面存在元素…)就可以类比上面的公式得出
S(4) - S(3) - S(2) + S(1) 这里S同样是矩阵元素的sum值。
下面附上代码块
比较暴力…毕竟一力降十会hhh

class Solution {
   
    public int numSubmatrixSumTarget(int[][] matrix, int target) {
   
        int[][] sums = new int[matrix.length+1][matrix[0].length+1];
        for(int i = 1; i < sums.length; ++i){
   
            for(int j = 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值