1074. 元素和为目标值的子矩阵数量
Posted 尖子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1074. 元素和为目标值的子矩阵数量相关的知识,希望对你有一定的参考价值。
题目来源:1074. 元素和为目标值的子矩阵数量
给出矩阵 matrix
和目标值 target
,返回元素总和等于目标值的非空子矩阵的数量。
子矩阵 x1, y1, x2, y2
是满足 x1 <= x <= x2
且 y1 <= y <= y2
的所有单元 matrix[x][y]
的集合。
如果 (x1, y1, x2, y2)
和 (x1\', y1\', x2\', y2\')
两个子矩阵中部分坐标不同(如:x1 != x1\'
),那么这两个子矩阵也不同。
/** * @param {number[][]} matrix * @param {number} target * @return {number} */ var numSubmatrixSumTarget = function(matrix, target) { let m = matrix.length; let n = matrix[0].length; let res = 0; for(let i = 0;i<m;i++){ let sum = new Array(n).fill(0); for(let j=i;j<m;j++){ for(let k=0;k<n;k++){ sum[k] +=matrix[j][k]; } res+=findSumTarget(sum,target); } } function findSumTarget (sum,k) { let map = new Map(); map.set(0,1); let pre = 0; let count = 0; for(num of sum){ pre+=num; if(map.has(pre-k)){ count+= map.get(pre-k) } map.set(pre, (map.get(pre)||0) + 1) } return count; } return res; }; let matrix = [[0,1,0],[1,1,1],[0,1,0]], target = 0 console.log(matrix, target, numSubmatrixSumTarget(matrix,target)) matrix = [[1,-1],[-1,1]], target = 0 console.log(matrix, target, numSubmatrixSumTarget(matrix,target)) matrix = [[904]], target = 0 console.log(matrix, target, numSubmatrixSumTarget(matrix,target))
示例 1:
输入:matrix = [[0,1,0],[1,1,1],[0,1,0]], target = 0 输出:4 解释:四个只含 0 的 1x1 子矩阵。
示例 2:
输入:matrix = [[1,-1],[-1,1]], target = 0 输出:5 解释:两个 1x2 子矩阵,加上两个 2x1 子矩阵,再加上一个 2x2 子矩阵。
示例 3:
输入:matrix = [[904]], target = 0 输出:0
提示:
1 <= matrix.length <= 100
1 <= matrix[0].length <= 100
-1000 <= matrix[i] <= 1000
-10^8 <= target <= 10^8
以上是关于1074. 元素和为目标值的子矩阵数量的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode] 1074. 元素和为目标值的子矩阵数量
LeetCode 1074. 元素和为目标值的子矩阵数量(map,前缀和)
LeetCode 1074 元素和为目标值的子矩阵数量[动态规划 前缀和 暴力] HERODING的LeetCode之路