1
var maxProductPath = function (grid) {4
if (R === 0 || C === 0) return -1;6
const mat = [...Array(R)].map(() => [...Array(C)].map(() => new Array(2)));8
mat[0][0] = [grid[0][0], grid[0][0]];9
for (let i = 1; i < R; i++)10
mat[i][0] = [mat[i - 1][0][0] * grid[i][0], mat[i - 1][0][1] * grid[i][0]];12
for (let i = 1; i < C; i++)13
mat[0][i] = [mat[0][i - 1][0] * grid[0][i], mat[0][i - 1][1] * grid[0][i]];15
for (let i = 1; i < R; i++) {16
for (let j = 1; j < C; j++) {17
const max = Math.max(mat[i - 1][j][0], mat[i][j - 1][0]),18
min = Math.min(mat[i - 1][j][1], mat[i][j - 1][1]);19
if (grid[i][j] >= 0) mat[i][j] = [max * grid[i][j], min * grid[i][j]];20
else mat[i][j] = [min * grid[i][j], max * grid[i][j]];24
return mat[R - 1][C - 1][0] >= 0 ? mat[R - 1][C - 1][0] % (10 ** 9 + 7) : -1;