Matrix Block Sum LeetCode solution in JavaScript

1
/**
2
* @param {number[][]} mat
3
* @param {number} k
4
* @return {number[][]}
5
*/
6
var matrixBlockSum = function (mat, k) {
7
let sum = 0;
8
let dp = Array(mat.length + 1);
9
dp[0] = Array(mat[0].length).fill(0);
10

11
// sum of row el
12
for (let i = 0; i < mat.length; i++) {
13
dp[i + 1] = Array(mat[0].length).fill(0);
14
for (let j = 0; j < mat[0].length; j++) {
15
dp[i + 1][j] += mat[i][j] + sum;
16
sum = dp[i + 1][j];
17
}
18
sum = 0;
19
}
20

21
// sum of col el
22
for (let j = 0; j < mat[0].length; j++) {
23
for (let i = 0; i < mat.length; i++) {
24
dp[i + 1][j] += sum;
25
sum = dp[i + 1][j];
26
}
27
sum = 0;
28
}
29

30
dp = dp.slice(1);
31

32
// cal sum of blocks
33
for (let i = 0; i < mat.length; i++) {
34
let r1 = Math.max(0, i - k);
35
let r2 = Math.min(mat.length - 1, i + k);
36
for (let j = 0; j < mat[0].length; j++) {
37
let c1 = Math.max(0, j - k);
38
let c2 = Math.min(mat[0].length - 1, j + k);
39

40
let value = dp[r2][c2];
41

42
if (r1 - 1 >= 0) {
43
value -= dp[r1 - 1][c2];
44
}
45
if (c1 - 1 >= 0) {
46
value -= dp[r2][c1 - 1];
47
}
48
if (r1 - 1 >= 0 && c1 - 1 >= 0) {
49
value += dp[r1 - 1][c1 - 1];
50
}
51
mat[i][j] = value;
52
}
53
}
54

55
return mat;
56
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0