
链接:1074. 元素和为目标值的子矩阵数量 - 力扣(LeetCode)
题解:
1、求前缀[0,0] 到[i,j]访问的的矩阵和
2、枚举上边界和下边界
3、右边界,逐渐扩大,通过统计前缀和的方式来求解,变为一维区间和
class Solution {
public:
int numSubmatrixSumTarget(vector<vector<int>>& matrix, int target) {
int m = matrix.size();
if (m <= 0) {
return 0;
}
int n = matrix[0].size();
if (n <= 0) {
return 0;
}
vector<vector<int>> prefix(m+1, vector<int>(n+1, 0));
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
prefix[i+1][j+1] = prefix[i+1][j] + prefix[i][j+1] - prefix[i][j] + matrix[i][j];
}
}
int result = 0;
for (int t = 0; t < m; ++t) {
for (int b = t; b < m; ++b) {
unordered_map<int, int> prefix_sum;
prefix_sum[0] = 1;
for (int i = 0; i < n; ++i) {
int tmp = prefix[b+1][i+1] - prefix[t][i+1];
if (prefix_sum.find(tmp-target) != prefix_sum.end()) {
result += prefix_sum[tmp-target];
}
++prefix_sum[tmp];
}
}
}
return result;
}
};
&spm=1001.2101.3001.5002&articleId=164476829&d=1&t=3&u=d1c9ef19b3f24cbd935b6f37acc342ee)
241

被折叠的 条评论
为什么被折叠?



