aboutsummaryrefslogtreecommitdiff
path: root/number_submatrices_sum_target.cpp
blob: db5a84f005a46cba4c72cfade75b44c734e205e9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "leetcode.h"

class Solution {
public:
  int numSubmatrixSumTarget(vector<vector<int>> &matrix, int target) {
    int xLen = matrix[0].size(), yLen = matrix.size(), ans = 0;
    unordered_map<int, int> res;
    for (int i = 0; i < yLen; i++)
      for (int j = 1; j < xLen; j++)
        matrix[i][j] += matrix[i][j - 1];
    for (int j = 0; j < xLen; j++)
      for (int k = j; k < xLen; k++) {
        res.clear();
        res[0] = 1;
        int cSum = 0;
        for (int i = 0; i < yLen; i++) {
          cSum += matrix[i][k] - (j ? matrix[i][j - 1] : 0);
          ans += res.find(cSum - target) != res.end() ? res[cSum - target] : 0;
          res[cSum]++;
        }
      }
    return ans;
  }
};