1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| class Solution { public int numSubmatrixSumTarget(int[][] matrix, int target) { int row = matrix.length; int col = matrix[0].length; int count = 0; for (int i = 0; i < row; i++) { int[] sum = new int[col]; for (int j = i; j < row; j++) { for (int c = 0; c < col; c++) { sum[c] += matrix[j][c]; } count += subArrayCount(sum, target); } } return count; }
public int subArrayCount(int[] nums, int k) { Map<Integer, Integer> map = new HashMap<>(); int count = 0, pre = 0; map.put(0, 1); for (int i = 0; i < nums.length; i++) { pre += nums[i]; if (map.containsKey(pre - k)) { count += map.get(pre - k); } map.put(pre, map.getOrDefault(pre, 0) + 1); } return count; } }
|