/**
* Problem: LeetCode 2906 - Construct Product Matrix
* Difficulty: Medium
* Language: Java
* Author: CodeByTushu
*/
class Solution {
public int[][] constructProductMatrix(int[][] grid) {
int n = grid.length;
int m = grid[0].length;
int[][] p = new int[n][m];
int MOD = 12345;
long prefix = 1;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
p[i][j] = (int) prefix;
prefix = (prefix * (grid[i][j] % MOD)) % MOD;
}
}
long suffix = 1;
for (int i = n - 1; i >= 0; i--) {
for (int j = m - 1; j >= 0; j--) {
p[i][j] = (int) ((p[i][j] * suffix) % MOD);
suffix = (suffix * (grid[i][j] % MOD)) % MOD;
}
}
return p;
}
}
"""
Problem: LeetCode 2906 - Construct Product Matrix
Difficulty: Medium
Language: Python
Author: CodeByTushu
"""
class Solution:
def constructProductMatrix(self, grid: list[list[int]]) -> list[list[int]]:
n, m = len(grid), len(grid[0])
MOD = 12345
p = [[0] * m for _ in range(n)]
prefix = 1
for i in range(n):
for j in range(m):
p[i][j] = prefix
prefix = (prefix * (grid[i][j] % MOD)) % MOD
suffix = 1
for i in range(n - 1, -1, -1):
for j in range(m - 1, -1, -1):
p[i][j] = (p[i][j] * suffix) % MOD
suffix = (suffix * (grid[i][j] % MOD)) % MOD
return p
/**
* Problem: LeetCode 2906 - Construct Product Matrix
* Difficulty: Medium
* Language: C++
* Author: CodeByTushu
*/
#include <vector>
using namespace std;
class Solution {
public:
vector<vector<int>> constructProductMatrix(vector<vector<int>>& grid) {
int n = grid.size();
int m = grid[0].size();
vector<vector<int>> p(n, vector<int>(m));
const int MOD = 12345;
long long prefix = 1;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
p[i][j] = prefix;
prefix = (prefix * (grid[i][j] % MOD)) % MOD;
}
}
long long suffix = 1;
for (int i = n - 1; i >= 0; --i) {
for (int j = m - 1; j >= 0; --j) {
p[i][j] = (p[i][j] * suffix) % MOD;
suffix = (suffix * (grid[i][j] % MOD)) % MOD;
}
}
return p;
}
};
/**
* Problem: LeetCode 2906 - Construct Product Matrix
* Difficulty: Medium
* Language: JavaScript
* Author: CodeByTushu
*/
var constructProductMatrix = function(grid) {
const n = grid.length;
const m = grid[0].length;
const MOD = 12345;
const p = Array.from({ length: n }, () => new Int32Array(m));
let prefix = 1;
for (let i = 0; i < n; i++) {
for (let j = 0; j < m; j++) {
p[i][j] = prefix;
prefix = (prefix * (grid[i][j] % MOD)) % MOD;
}
}
let suffix = 1;
for (let i = n - 1; i >= 0; i--) {
for (let j = m - 1; j >= 0; j--) {
p[i][j] = (p[i][j] * suffix) % MOD;
suffix = (suffix * (grid[i][j] % MOD)) % MOD;
}
}
return p.map(row => Array.from(row));
};